2012-11-02 51 views
0

我有一個多維數組,看起來像這樣:數組元素爲空,它不應該是

$orderedList {} 
    [0] { 
     ["listElemId"] = 1 
     ["listElemPoints"] = 6 
    } 
    [1] { 
     ["listElemId"] = 2 
     ["listElemPoints"] = 5 
    } 
    [2] { 
     ["listElemId"] = 4 
     ["listElemPoints"] = 14 
    } 
    [3] { 
     ["listElemId"] = 3 
     ["listElemPoints"] = 14 
    } 
} 

我做的是給「列表中的元素」(即數組的元素根; [0],[1]等)一個名爲['listElemOrderPlace']的新子元素,並根據這些點給它一個放置。

這工作正常,除非涉及具有相同數量的點的列表元素。在這種情況下,我想給他們同樣的位置,(即['listElemOrderPlace']中的相同數字)。這是我需要幫助的地方。

下面的代碼應該工作(我不明白爲什麼它不應該),但有些錯誤。當我回顯最後一個列表元素的點時,它是空的,即使它實際上不是(它存儲在數據庫等等)。唯一應該是空的是循環中的第一輪,因爲$ j指的是-1。

我在做什麼錯?

$j = -1; 
    for ($i = 0; $i < count($orderedList); $i++) { 

     echo $orderedList[$i]['listElemPoints']; // 6, 14, 14 
     echo $orderedList[$j]['listElemPoints']; // Empty all the time (?) 

     if ($orderedList[$i]['listElemPoints'] = $orderedList[$j]['listElemPoints']) { 
      $orderedList[$i]['listElemOrderPlace'] = $orderedList[$j]['listElemOrderPlace']; 
     } 
     else { 
      $orderedList[$i]['listElemOrderPlace'] = $i+1; 
     } 
     $j += 1; 
    } 

回答

1

你是容易出錯的代碼,你首先需要對數組進行排序基於listElemPoints

uasort($orderedList, function($a, $b) { 
    return $a['listElemPoints'] > $b['listElemPoints']; 
}); 

此之後,你可以寫一個簡單的循環來添加listElemOrderPlace

$i = 1; 
foreach ($orderedList as &$ol) { 
    $ol['listElemOrderPlace'] = (!isset($lastCount) || $ol['listElemPoints'] !== $lastCount) ? $i++ : $i; 
    $lastCount = $ol['listElemPoints']; 
} 
+0

第一種排序是在代碼的前面完成的,但是嘿。非常感謝!真的幫助我:) – holyredbeard

6

你是在你如果分配一個值:

if ($orderedList[$i]['listElemPoints'] = $orderedList[$j]['listElemPoints']) { 

用這個代替:

if ($orderedList[$i]['listElemPoints'] == $orderedList[$j]['listElemPoints']) { 
+0

啊,當然!多達數小時;)謝謝! – holyredbeard