我正在尝试对以下数组的最后一个维度进行排序
$inventory = array(
"author" => array(
"1" => "Evans, Dave",
"2" => "Burnett, Bill",
),
"title" => array(
"1" => "Designing your life",
),
"subject" => array(
"1" => "Vocational guidance",
"2" => "Decision making",
"3" => "Self-realization",
)
);
所需的输出将是这样的:
author Burnett, Bill
author Evans, Dave
title Designing your life
subject Decision making
subject Self-realization
subject Vocational guidance
有一堆排序示例不起作用。有任何想法吗?未经测试请不要乱回答。
您可以执行以下任一操作:
array_walk($inventory, function(&$v, $k) {
sort($v);
});
var_dump
返回:
array(3) {
["author"]=>
array(2) {
[0]=>
string(13) "Burnett, Bill"
[1]=>
string(11) "Evans, Dave"
}
["title"]=>
array(1) {
[0]=>
string(19) "Designing your life"
}
["subject"]=>
array(3) {
[0]=>
string(15) "Decision making"
[1]=>
string(16) "Self-realization"
[2]=>
string(19) "Vocational guidance"
}
}
array_walk($inventory, function(&$v, $k) {
asort($v);
});
var_dump
返回:
array(3) {
["author"]=>
array(2) {
[2]=>
string(13) "Burnett, Bill"
[1]=>
string(11) "Evans, Dave"
}
["title"]=>
array(1) {
[1]=>
string(19) "Designing your life"
}
["subject"]=>
array(3) {
[2]=>
string(15) "Decision making"
[3]=>
string(16) "Self-realization"
[1]=>
string(19) "Vocational guidance"
}
}
请注意,这两种解决方案都会将索引类型从
string
更改为 int
。
感谢 RJK(和 Rob Eyre)提供的有用答案。我找到了这个解决方案,在
asort
循环中使用 for
:
$keys = array_keys($inventory);
for ($i = 0; $i < count($inventory); $i++) {
asort($inventory[$keys[$i]]);
foreach($inventory[$keys[$i]] as $key => $value) {
echo $keys[$i]." ".$value."<br />";
}
}
echo "<br />";
但我认为
array_walk
的解决方案更专业。