PHP多维数组排序

5
我有以下数组。我需要按嵌套数组键[id]对此数组进行排序:
Array ( 
[0] => Array ( [id] => 5 [category_id] => 12 )
[1] => Array ( [id] => 3 [category_id] => 12 )
[2] => Array ( [id] => 9 [category_id] => 12 )
[3] => Array ( [id] => 4 [category_id] => 12 )
)

重复的内容:https://dev59.com/xE_Ta4cB1Zd3GeqPA3Sb#3376735 - bcosca
6个回答

8

使用带有自定义比较函数的usort

<?php

function cmp($a, $b) {
  if ($a['id'] == $b['id'])
    return 0;
  return $a['id'] < $b['id'] ? -1 : 1;
}

$array = Array ( 
  0 => Array ( 'id' => 5, 'category_id' => 12 ),
  1 => Array ( 'id' => 4, 'category_id' => 12 ),
  2 => Array ( 'id' => 7, 'category_id' => 12 ),
  3 => Array ( 'id' => 3, 'category_id' => 12 ),
);

usort($array, 'cmp');

// Output: 3 4 5 7 
foreach ($array as $element)
   echo $element['id'], " ";

cmp 函数中,你可以直接返回 $a['id'] - $b['id'] - Artefacto

2
你可以像这样做。
foreach($arr as $val) {
    $ret[$val['id']] = $val['category_id'];
}
ksort($ret);

如果您想对相同的数组进行排序,则可以添加以下代码:

foreach($ret as $key=>$val) {
    $newArr[] = array('id'=>$key,'category_id'=>$val);
}

2
您可能需要使用array_multisort函数。请参考文档中的示例#3。

1

为什么不直接像这样存储数据呢?

Array ( 
    [5] => int(12)
    [3] => int(12)
    [9] => int(12)
    [4] => int(12)
)

然后您可以像往常一样使用ksort()


1
这是我处理需要将两个数字映射在一起的数组的方法。它可能不是那么明确,但使用它确实会让工作变得更加容易。 - TJ L

0
function sort_by_field($field, & $data) {
    $sort_func = create_function('$a,$b', 'if ($a["' . $field . '"] == $b["' . $field . '"]) {return 0;} 
            return ($a["' . $field . '"] < $b["' . $field . '"]) ? -1 : 1;');

    uasort($data, $sort_func);
}

0

尝试使用 array_multisort 函数,它可以按照内部数组的第一个键/属性对外部数组进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接