Array
(
[12] => Array
(
[id] => 12
[name] => Car
[children] => Array
(
[0] => Array
(
[id] => 14
[name] => Volvo
)
[1] => Array
(
[id] => 15
[name] => Mercedes-Benz
)
)
)
[13] => Array
(
[id] => 13
[name] => Manga
[children] => Array
(
[0] => Array
(
[id] => 16
[name] => Naruto
)
[1] => Array
(
[id] => 17
[name] => Hunter X Hunter
)
)
)
[18] => Array
(
[id] => 18
[name] => aa
[children] => Array
(
)
)
)
伙计我想对这个数组的值进行排序,我想按键对它进行排序,键是'name'。这应该通过键'name'对第一级和第二级进行排序。
这个数组我放入print_r()
所以它看起来像这样。该阵列没有修复,所以我可以在将来添加。
所以在排序数组的最终值后......
Array
(
[18] => Array
(
[id] => 18
[name] => aa
[children] => Array
(
)
)
[12] => Array
(
[id] => 12
[name] => Car
[children] => Array
(
[0] => Array
(
[id] => 15
[name] => Mercedes-Benz
)
[1] => Array
(
[id] => 14
[name] => Volvo
)
)
)
[13] => Array
(
[id] => 13
[name] => Manga
[children] => Array
(
[0] => Array
(
[id] => 17
[name] => Hunter X Hunter
)
[1] => Array
(
[id] => 16
[name] => Naruto
)
)
)
)
这是代码中的数组。
$categories = array(
12 =>
array('id' =>12,
'name' => 'Car',
'children' =>
array(
array('id' => 14,
'name' => 'volvo'
)
),
array(
array('id' => 15,
'name' => 'Mercedez-Benz'
)
)
),
13 =>
array('id' =>13,
'name' => 'Manga',
'children' =>
array(
array('id' => 16,
'name' => 'Naruto'
)
),
array(
array('id' => 17,
'name' => 'Hunter X Hunter'
)
)
),
18=>
array('id' => 18,
'name'=> 'aa',
'children' => array())
);
echo "<pre>";
print_r($categories);
答案 0 :(得分:0)
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
在这个例子中,结果将是:
a = orange
b = banana
c = apple
d = lemon
无论如何要回答关于如何在“名称”上对其进行排序的问题,请使用“usort”:
function cmp($a, $b) {
return $a['name'] - $b['name'];
}
usort($arr,"cmp");
请查看以下链接以获取更多信息: How do I sort a PHP array by an element nested inside?
答案 1 :(得分:0)
如果使用php 5.3+,您可以在代码中使用闭包并按此类排序
usort($categories,function($a,$b){
return $a['name'] - $b['name']
}
答案 2 :(得分:0)
所以,
我会尝试向你解释一下
您的数组很大,是的,但您只想对键值'[name]'进行排序。 在我的测试中,我使用了您提供的阵列:
$categories = array(
12 =>
array('id' =>12,
'name' => 'Car',
'children' =>
array(
array('id' => 14,
'name' => 'volvo'
)
),
array(
array('id' => 15,
'name' => 'Mercedez-Benz'
)
)
),
13 =>
array('id' =>13,
'name' => 'Manga',
'children' =>
array(
array('id' => 16,
'name' => 'Naruto'
)
),
array(
array('id' => 17,
'name' => 'Hunter X Hunter'
)
)
),
18=>
array('id' => 18,
'name'=> 'aa',
'children' => array())
);
如果声明了数组,你可以像这样添加usort:
usort($categories,"sortByName");
上面的第一个元素($ categories)是你的数组,第二个元素将提供一个函数的名称,在本例中是'sortByName'。
之后,你只需在你的代码中添加一个函数(无论你把它放在哪里都没关系,即使它在页面的底部):
function sortByName($categories, $b) {
return strcasecmp($categories["name"], $b["name"]);
}
基本上这个函数的功能是将你的数组与...你的数组进行比较:)所以它可以按照你想要的名称对其进行alfaabetically排序。 'strcasecmp'是将你的字符串与彼此进行比较以对其进行排序。并非这种情况不敏感(strcmp也会区分大小写)。我假设你不希望它检查大写等等,否则结果将不是你想要的。
添加该代码后,您可以再次打印数组:
echo "<pre>";
print_r($categories);
你的结果将是:
Array
(
[0] => Array
(
[id] => 18
[name] => aa
[children] => Array
(
)
)
[1] => Array
(
[id] => 12
[name] => Car
[children] => Array
(
[0] => Array
(
[id] => 14
[name] => volvo
)
)
[0] => Array
(
[0] => Array
(
[id] => 15
[name] => Mercedez-Benz
)
)
)
[2] => Array
(
[id] => 13
[name] => Manga
[children] => Array
(
[0] => Array
(
[id] => 16
[name] => Naruto
)
)
[0] => Array
(
[0] => Array
(
[id] => 17
[name] => Hunter X Hunter
)
)
)
我希望这就是你想要的。 : - )