【问题标题】:Laravel/PHP how to use array map and sortLaravel/PHP 如何使用数组映射和排序
【发布时间】:2019-03-24 14:44:29
【问题描述】:

我正在使用 laravel/php 构建一个应用程序。我正在使用如何映射和排序我的数组。有没有人可以帮我解决这个问题?我有这两个不同的数组。第一张图是标签,第二张是我的数据。

我正在尝试将标签映射到数据并将我的数据排序为从最小值到最大值 但我只使用 javascript 做到了。

这是我的示例代码。

$arrayOfObjIssues = $arrayLabelIssues.map(function($d, $i) {
return {
    label: $d,
  data: $arrayDataIssues[$i] || 0
  };
});

  $sortedArrayOfObjIssues = $arrayOfObjIssues.sort(function($a, $b) {
    return $b.data>$a.data;
  });

$newArrayLabelIssues = [];
$newArrayDataIssues = [];
$sortedArrayOfObjIssues.forEach(function($d){
  $newArrayLabelIssues.push($d.label);
  $newArrayDataIssues.push($d.data);
});

我该如何解决这个问题?欢迎所有帮助。提前谢谢你。

【问题讨论】:

    标签: php arrays laravel laravel-5


    【解决方案1】:

    在 PHP 中,我们使用 -> 而不是 . 点表示法

    如果$arrayLabelIssues 是一个普通的 PHP 数组,你必须先将它转换为 Laravel 集合才能使用它的函数。

    所以你会做这样的事情:

    $arrayLabelIssues = collect($arrayLabelIssues); // now it's a Laravel Collection object
    
    // and you can use functions like map, foreach, sort, ...
    $arrayLabelIssues->map(function($item) {
        // ... your code 
    });
    

    【讨论】:

    • 我的代码在$arrayOfObjIssues这里有问题,我不知道为什么。
    • 有什么问题?
    【解决方案2】:

    试试这个(你不需要特别是 Laravel 的 Collection):

    // Create empty array that will contain $arr1 as keys and $arr2 as values
    $newArray = [];
    foreach($arr1 as $i => $item) {
      // Match the two arrays together. Get the same index from the 2nd array.
      $newArray[$item] = $arr2[$i];
    }
    // Sort the list by value
    asort($newArray);
    

    【讨论】:

    • 我为标签和数据制作两个newArray[]可以吗?
    • 这取决于你想对数据做什么。这只是将它从 min 到 max 排序
    • 我解决了它,但我尝试了你的代码,它在asort() 中给了我一个布尔值,所以它有点奇怪。仍然非常感谢您抽出宝贵的时间。
    • 是的asort 不返回数组,它作用于$newArray
    【解决方案3】:

    使用 Laravel 集合,这相当简单:

    $keys = ['B', 'C', 'A'];
    $values = [1, 2, 3];
    
    $collection = \Illuminate\Support\Collection::make($keys); // state: ['B', 'C', 'A']
    $combined = $collection->combine($values); // state: ['B' => 1, 'C' => 2, 'A' => 3]
    $sorted = $combined->sortKeys(); // state: ['A' => 3, 'B' => 1, 'C' => 2]
    
    $sorted->toArray(); // to get the result back as array like shown above
    

    如需进一步参考,请查看可用的collection methods

    【讨论】:

    • sortKeys()laravel 5.6.6以上版本要求?
    • 可能,是的。您可以改用$collection->sortBy(function ($value, $key) { return $key; })
    • 非常感谢。
    【解决方案4】:

    在集合中,如果它具有相同的值,那么它不会映射每个值你也可以试试这个

    $keys = ['B', 'C', 'A'];
    $values = [1, 2, 3];
    for($i = 0; $i < sizeof($keys); $i++){
                $maping[$keys[$i]] = $values [$i];
            } // output ['B' => 1, 'C' => 2, 'A' => 3]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2019-02-09
      相关资源
      最近更新 更多