2013-02-15 67 views
0

我有一個問題,即將值分配給數組數組,以將重複值添加到相同的值中。代碼如下:將值分配給雙數組

if(isset($rowsarray) && 0 < count($rowsarray)) { 
    foreach ($rowsarray as $rowt) { 
     if($version == $rowt[0]) { 
      $rowt[1] += $success; 
      $rowt[2] += $failure; 
      $noDuplicate = false; 
      break; 
     } 
    } 
} 
if(true == $noDuplicate) { 
    $rowsarray[] = array($version, $success, $failure); 
} 

所以,如果它是一個版本,我只是將它加入第一次出現,否則我只是營養不良的人口增加陣列中的成功和失敗率。我已經嘗試foreach($ rowsarray作爲$ key => $ rowt)沒有成功,因爲「內部」數組似乎沒有受到影響。我全新的PHP,所以我想這是一個相當簡單的解決方案,但現在它只需要第一個版本的訪問,所有其他的都在循環內,但不是在它外面。

+0

'$ rowsarray'是什麼樣子的? – Antony 2013-02-15 15:31:19

+0

'true == $ noDuplicate','0 Shoe 2013-02-15 15:34:40

+0

真正的== $ noDuplicate檢查是我不想再次添加它,如果我更新它,0 Andreas 2013-02-16 16:26:49

回答

4

您正在嘗試修改由foreach()創建的臨時數組,這意味着每次迭代都會丟棄/替換$rowt。你可以解決它與基準或修改的foreach:

foreach ($rowsarray as &$rowt) { 
         ^---- 
     $rowt[1] += $success; 

,或者更少的麻煩:

foreach($rowsarray as $key => $rowt) { 
    $rowsarray[$key][1] += $success; 
+0

嗯,兩種解決方案都會引發未定義的賦值偏移。第二種解決方案似乎不太經常出錯,但仍不會採取。 – Andreas 2013-02-17 15:22:26

+0

nm我,如果我正確讀取解決方案並做了它所說的$ rowsarray [$ key] [1] + = $ success;而不是$ rowt [$ key] [1] + = $ success;它會起作用。 – Andreas 2013-02-17 15:29:12

1

可以簡化這個檢查有:

if(isset($rowsarray) && 0 < count($rowsarray)) { 

if(! empty($rowsarray)){ 

然後,

foreach ($rowsarray as $key => $rowt) { 
    if($version == $rowt[0]) { 
     $rowsarray[$key][1] += $success; 
     $rowsarray[$key][2] += $failure;