[英]Sorting a 3 dimensional array
我有一个像这样的数组
Array
(
[0] => Array
(
[0] => Array
(
[szam] => 8
[index] => 0
)
)
[1] => Array
(
[0] => Array
(
[szam] => 1
[index] => 0
)
[1] => Array
(
[szam] => 7
[index] => 1
)
)
我以为我的最后一个cmp可以正常工作
function maxSzerintCsokkeno($item1,$item2)
{
if ($item1['szam'] == $item2['szam']) return 0;
return ($item1['szam'] < $item2['szam']) ? 1 : -1;
}
与foreach
foreach ($tomb as $kulcs => $adat) usort($adat,"maxSzerintCsokkeno");
但是它什么也没做,建议吗?
foreach ($tomb as $kulcs => $adat) usort($adat,"maxSzerintCsokkeno");
这只会对子数组数组$ adat进行排序。 这只是暂时存在,直到foreach循环到下一个。 这里的懒惰选项是使用参考:
foreach ($tomb as & $adat) usort($adat,"maxSzerintCsokkeno");
注意&
。 这样,对$ adat的修改将直接应用到父数组中。
您正在对一个临时变量进行排序,这意味着未应用更改。 以下应该为您工作:
for($i = 0, $length = count($tomb); $i < $length; $i++)
{
usort($tomb[$i], "maxSzerintCsokkeno");
}
在foreach循环中迭代时,键和值变量(代码中的$kulcs
和$adat
)是数组中实际值的副本。 就像蒂姆·库珀(Tim Cooper)所说的那样,您实际上是在对原始值的副本进行排序。
您还可以在foreach循环中通过引用传递值。 这意味着您将要修改原始值:
foreach ($tomb as $kulcs => &$adat) usort($adat,"maxSzerintCsokkeno");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.