在二维数组的每一行中仅对键进行排序。
问题的原因是需要对一个二维数组的每一行的键进行排序。解决方法是使用array_combine
函数将数组合并,然后使用ksort
函数对键进行排序。
在PHP中,array_combine
函数可以将两个数组合并为一个新的数组,其中一个数组的值作为新数组的键,另一个数组的值作为新数组的值。这样,我们可以将二维数组的每一行的键和值分别作为两个数组,然后使用array_combine
函数将它们合并为一个新的数组。
然后,我们可以使用ksort
函数对新数组的键进行排序。ksort
函数会按照键的字母顺序对数组进行排序,保持键和值的关联关系。
下面是一个示例代码,演示了如何使用array_combine
和ksort
函数对二维数组的每一行的键进行排序:
$originalArray = array( array("c" => 3, "a" => 1, "b" => 2), array("b" => 2, "a" => 1, "c" => 3), array("a" => 1, "c" => 3, "b" => 2) ); $sortedArray = array(); foreach ($originalArray as $row) { $keys = array_keys($row); $values = array_values($row); array_combine($keys, $values); ksort($row); $sortedArray[] = $row; } print_r($sortedArray);
执行以上代码,输出结果为:
Array
(
[0] => Array
(
[a] => 1
[b] => 2
[c] => 3
)
[1] => Array
(
[a] => 1
[b] => 2
[c] => 3
)
[2] => Array
(
[a] => 1
[b] => 2
[c] => 3
)
)
以上代码首先定义了一个二维数组$originalArray
,其中包含了三个具有不同键的数组。然后,通过遍历$originalArray
,分别获取每一行的键和值,并使用array_combine
函数将它们合并为一个新的数组。接着,使用ksort
函数对新数组的键进行排序。最后,将排序后的行添加到一个新的数组$sortedArray
中。
通过以上方法,我们可以对二维数组的每一行的键进行排序。这个方法可以用于各种需要对二维数组进行排序的场景,例如按照某个特定的键进行排序,或者按照键的字母顺序进行排序。
问题的出现原因:
在一个二维数组中,需要对每一行的键进行排序。但是,由于键的顺序不确定,开发者需要找到一种方法来对键进行排序。
解决方法:
如果键的顺序事先已知,开发者可以在一个默认数组中硬编码键的顺序,然后覆盖值。这可以通过以下几种方法来实现:
1. 使用foreach循环并通过引用进行修改:
$defaults = array_fill_keys(range(20, 100, 20), 0); foreach ($array as &$row) { $row = array_replace($defaults, $row); } var_export($array);
2. 使用foreach循环来填充一个新数组:
$defaults = array_fill_keys(range(20, 100, 20), 0); $result = []; foreach ($array as $row) { $result[] = array_replace($defaults, $row); } var_export($result);
3. 使用array_map函数:
$defaults = array_fill_keys(range(20, 100, 20), 0); var_export( array_map( fn($row) => array_replace($defaults, $row), $array ) );
如果键的顺序事先不知道,开发者可以使用经典循环或函数迭代器来对键进行排序。以下是几种解决方法:
1. 使用foreach循环通过引用修改行:
foreach ($array as &$row) { ksort($row); } var_export($array);
需要注意的是,如果不使用引用符号&,排序将应用于循环正在迭代的数组的“副本”(而不是原始数组)。
2. 使用array_walk函数:
array_walk($array, fn(&$row) => ksort($row)); var_export($array);
与foreach循环类似,需要确保使用了引用,否则自定义函数内部的处理将被忽略。
3. 使用array_map函数:
var_export( array_map( function($row) { ksort($row); return $row; }, $array ) );
使用array_map函数同样可以对键进行排序,而且不需要修改引用。
需要注意的是,array_merge函数在处理数字键时不能正常工作。