2017-10-22 66 views
1

我試圖將一組新的鍵和值添加到二維關聯數組中。這裏是我的陣列

myArray = array(1 => array("John", 500, "2012-09-02"), 
2 => array("Mike", 105, "2012-07-01"), 
3 => array("Joe", 24, "2011-12-23"), 
4 => array("Alex", 65, "2012-08-30")); 

我希望做的是有用戶輸入比或者增加值[1]的ID和名稱由5如果輸入的數據是myArray的,但如果它不是比我會喜歡將他們的信息作爲新數據添加到數組中,所以它應該輸出/打印第5個$ key和$ values。 if語句正常工作,並將value [1]加5,但我似乎無法得到else if語句來添加新條目。

$nameExists = FALSE; 
$name = htmlspecialchars($_POST['name']); 
$id = htmlspecialchars($_POST['id']); 

foreach($myArray as $key => $value){ 
    if($key == $id && $value[0] == $name){ 
    $value[1] = $value[1] + 5; 
    $nameExists = TRUE; 
     } 
     else if ($nameExists === FALSE){ 
      $newData = array($name, 1, date("Y-m-d")); 
      $myArray[] = $newData; 
     } 
     echo "<tr><td>".$key."</td> 
        <td>".$value[0]."</td> 
        <td>".$value[1]."</td> 
        <td>".$value[2]."</td></tr>"; 
} 

任何幫助表示感謝,謝謝。

回答

0

看起來您的邏輯流程問題與$nameExists === FALSE檢查。應該在之後測試整個foreach循環已經完成,而不是循環體內部。否則,循環測試第一個數組元素的匹配,如果沒有找到正確的,則繼續追加到數組。

取而代之,將$nameExists === FALSE移至循環之後。如果未找到匹配項,該標誌將不會被設置爲TRUE,並且數組追加應該起作用。

$nameExists = FALSE; 

// Note: use htmlspecialchars() on *output to HTML* not on input filtering! 
// If you print these values later in the page, you should enclose them 
// in htmlspecialchars() at that time. Placing it here may cause 
// your values not to match in the loop if the stored vals were unescaped. 
$name = $_POST['name']; 
$id = $_POST['id']; 

// Note the &$value is needed here to modify the array inside the loop by reference 
// If left out, you'll get through the loop and changes will be discarded. 
foreach($myArray as $key => &$value){ 
    if($key == $id && $value[0] == $name){ 
     $value[1] = $value[1] + 5; 
     $nameExists = TRUE; 
     // No need to continue looping, you can exit the loop now 
     break; 
    } 
    // Finish loop - flag was set TRUE if any match was found 
} 

// Now, if nothing was modified in the loop and the flag is still FALSE, append a new one 
if ($nameExists === FALSE){ 
    $newData = array($name, 1, date("Y-m-d")); 
    $myArray[] = $newData; 
} 


// Use a separate loop to output your complete array after modification 
foreach ($myArray as $key => $value) { 
    // use htmlspecialchars() here instead... 
    // And display output values indexed $myArray[$id] 
    echo "<tr><td>".$key."</td> 
     <td>".htmlspecialchars($value[0])."</td> 
     <td>".htmlspecialchars($value[1])."</td> 
     <td>".htmlspecialchars($value[2])."</td></tr>"; 
} 

入住the PHP foreach documentation票據有關修改環形陣列&引用。

+0

我明白你說的是什麼,但是它在循環中的原因是因爲我想從數組中打印出包括任何新值的整組值。 – Pachuca

+0

對不起,忘了提。我試着用一個簡單的回聲來測試其他的東西,「它起作用了!」並且在給出新的輸入時打印出來的結果很好。我認爲這部分是錯誤的$ newData = array($ name,1,date(「Y-m-d」)); $ myArray [] = $ newData; – Pachuca

+0

'$ myArray [] = $ newData;'在語法上和邏輯上都是正確的,但它不能在循環中。請使用我的完整更新代碼嘗試一下。 –

相關問題