簡體   English   中英

排序3維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM