我正在寻找一些建议如何通过'variant_name'键对这种数组进行排序。
因为Array非常庞大,所以我把它缩小到了结果状态。
...
$filter[2413][1][81][sub_id] = 1;
$filter[2413][1][81][variant_id] = 81;
$filter[2413][1][81][variant_name] = 'Banana';
$filter[2413][2][87][sub_id] = 2;
$filter[2413][2][87][variant_id] = 87;
$filter[2413][2][87][variant_name] = 'Apple';
$filter[2413][3][32][sub_id] = 3;
$filter[2413][3][32][variant_id] = 32;
$filter[2413][3][32][variant_name] = 'Carrot';
...
键$filter[x][x][x]
不是连续的。
我已经尝试了之前使用过的sort函数,但它不能用于这种数组:
function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) {
$sort_col = array();
foreach ($arr as $key=> $row) {
$sort_col[$key] = $row[$col];
}
array_multisort($sort_col, $dir, $arr);
}
array_sort_by_column($filter[][][], 'variant_name');
我的目标是通过将'variant_name'排序为'Apple','Banana','Carrot'来相应地保持数组结构来修改数组。
答案 0 :(得分:1)
这是一个根据给定示例测试的工作代码。
请注意,我的代码仍然可以进行优化等等。只需将其作为我的建议。
TL; DR =使用usort()
。
function mySort($a,$b)
{
$av = "";
$bv = "";
foreach($a as $ak)
$av = $ak['variant_name'];
foreach($b as $bk)
$bv = $bk['variant_name'];
if($av[0] < $bv[0])
return false;
else return true;
}
如何使用它?您必须指定要排序的第一级数组。
usort($filter['2413'],"mySort");
然后我得到的结果是:
Array
(
[2413] => Array
(
[0] => Array
(
[87] => Array
(
[sub_id] => 2
[variant_id] => 87
[variant_name] => Apple
)
)
[1] => Array
(
[81] => Array
(
[sub_id] => 1
[variant_id] => 81
[variant_name] => Banana
)
)
[2] => Array
(
[32] => Array
(
[sub_id] => 3
[variant_id] => 32
[variant_name] => Carrot
)
)
)
)