2011-04-11 65 views
2

我有这样的排序3维数组

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"); 

但数组它不做任何事,建议?

回答

2

您正在对一个临时变量进行排序,这意味着不会应用更改。下面应该为你工作:

for($i = 0, $length = count($tomb); $i < $length; $i++) 
{ 
    usort($tomb[$i], "maxSzerintCsokkeno"); 
} 
3
foreach ($tomb as $kulcs => $adat) usort($adat,"maxSzerintCsokkeno"); 

这只排序子数组的数组$ ADAT。这只是临时存在,直到foreach循环下一个。这里的懒惰选项是使用参考:

foreach ($tomb as & $adat) usort($adat,"maxSzerintCsokkeno"); 

请注意&。这样,$ adat的修改将直接应用于父数组。

0

迭代遍历foreach循环时,键和值变量(代码中的$kulcs$adat)是数组中实际值的副本。像Tim Cooper说的那样,你实际上是在排序一个原始值的副本。

你也可以在你的foreach循环中通过引用传递值。这意味着您将修改原始值:

foreach ($tomb as $kulcs => &$adat) usort($adat,"maxSzerintCsokkeno");