在 PHP 中使用 array_walk 对数组进行排序?

问题描述 投票:0回答:2

如何将

ksort
应用于
$counts
数组的每个元素?我的意思是简单地在每个嵌套数组上调用这个函数,而不是递归地。

bool array_walk(array &$array, callable $funcname [,mixed $userdata = NULL])

我尝试过

array_walk
将标志
SORT_NUMERIC
作为用户数据传递。这给了我警告

    $counts = array();

    $counts['group1'] = array(); // Keys are timestamps but as STRING
    $counts['group2'] = array(); // Keys are timestamps but as STRING
    // ...

    // Array + operator does a key reordering here
    $counts['group1'] += $dummyData;
    $counts['group2'] += $dummyData;

    // .. so sort array by keys
    array_walk($counts, 'ksort', SORT_NUMERIC);

警告:ksort() 最多需要 2 个参数,给定 3 个。

第三个参数是什么?

编辑:天才答案:

foreach($counts as &$group) :
    ksort($group, SORT_NUMERIC);
endforeach;
php arrays multidimensional-array sorting
2个回答
0
投票

来自 http://php.net/manual/en/function.array-walk.php

通常,funcname 采用两个参数。数组参数的 值是第一个,键/索引是第二个。

如果提供了可选的 userdata 参数,它将作为 回调函数名称的第三个参数。


0
投票

如果您将二级键声明为字符串类型的整数,实际上并不重要,PHP 会自动将它们转换为整数

这意味着在此场景中您可以省略 SORT_NUMERIC 或 SORT_NATURAL 标志。

至于通过引用修改二级按键,你有两个基本选择。

经典循环:(演示

foreach ($counts as &$row) {
    ksort($row);
}

带有匿名回调的函数迭代:(Demo)

array_walk($counts, fn(&$row) => ksort($row));
© www.soinside.com 2019 - 2024. All rights reserved.