在php中对多维数组进行排序



我有一个数组数组,比如

$statuses = array(
  [0] => array('id'=>10, 'status' => 'active'),
  [1] => array('id'=>11, 'status' => 'closed'),
  [2] => array('id'=>12, 'status' => 'active'),
  [3] => array('id'=>13, 'status' => 'stopped'),
)

我希望能够制作一个新的数组,并且每个子数组都将包含基于它们是否具有相同状态的元素。这里的诀窍是,我不想根据硬编码的状态名称进行案例检查,因为它们可能是随机的。我想基本上做一个动态比较,然后说"如果你是唯一的,那么创建一个新的数组并把自己放在那里,如果一个数组已经存在,并且状态相同,那么就把我放在那里"。样本结果可能看起来像这样。

我真的遇到了一个挑战,因为我唯一能想到的方法就是将每个元素与其他元素进行比较,如果是唯一的,就创建一个新的数组。如果原始数组大于100,则会很快失控。必须有一些内置的功能可以使其高效。

<?php
$sortedArray = array(
    ['active'] => array(
        array(
            'id' => 10,
            'status' => 'active'
        ),
        array(
            'id' => 12,
            'status' => 'active'
        )
    ),
    ['closed'] => array(
        array(
            'id' => 11,
            'status' => 'active'
        )
    ),
    ['stopped'] => array(
        array(
            'id' => 13,
            'status' => 'active'
        )
    ),
)
$SortedArray = array();
$SortedArray['active'] = array();
$SortedArray['closed'] = array();
$SortedArray['stopped'] = array();
foreach($statuses as $Curr) {
    if ($Curr['status'] == 'active') { $SortedArray['active'][] = $Curr; }
    if ($Curr['status'] == 'closed') { $SortedArray['closed'][] = $Curr;  }
    if ($Curr['status'] == 'stopped') { $SortedArray['stopped'][] = $Curr;  }
}

你也可以用函数的方式来做这件事,尽管它和Marc说的很一样。

$sorted = array_reduce($statuses, function($carry, $status) {
    $carry[$status['status']][] = $status;
    return $carry;
}, []);

相关内容

  • 没有找到相关文章