2012-05-30 121 views
0

我在PHP中創建了這個函數,迄今爲止稱爲removeAllValuesMatching,但我似乎無法得到它的工作。我傳入兩個參數$ arr和$ value。不知道爲什麼會這樣。任何幫助將不勝感激。這是我到目前爲止有:PHP Array刪除匹配值

<?php 
$arr = array(
    'a' => "one", 
    'b' => "two", 
    'c' => "three", 
    'd' => "two", 
    'e' => "four", 
    'f' => "five", 
    'g' => "three", 
    'h' => "two" 
); 
function removeAllValuesMatching($arr, $value){ 
foreach ($arr as $key => $value){ 
if ($arr[$key] == $value){ 
unset($arr[$key]); 
} 
} 
return $arr = array_values($arr); 
} 

print_r(removeAllValuesMatching($arr, "two")); 

?> 
+0

什麼是不工作? 「我傳遞了兩個參數$ arr和$ value,不知道爲什麼會發生這種情況。」 - 你錯過了這兩句話之間的東西嗎? –

+0

當我傳入參數($ arr,「two」)時,它不會輸出數組中的任何元素。它應該打印出屏幕上的一,三,四,五,三 – vpd05141989

回答

3

你在這裏覆蓋$value

foreach ($arr as $key => $value){ 

簡單地將其重命名:

foreach ($arr as $key => $val) { 
    if ($val == $value) { 

然而,更好的方法來刪除來自陣列的元素是這樣的:

function removeAllValuesMatching(array $arr, $value) { 
    $keys = array_keys($arr, $value); 
    foreach ($keys as $key) { 
     unset($arr[$key]); 
    } 
    return $arr; 
} 
0

這是我的完整版,沒有變量的碰撞和縮進:這是不是一種選擇,你應該總是縮進正確

<?php 
$arr = array(
    'a' => "one", 
    'b' => "two", 
    'c' => "three", 
    'd' => "two", 
    'e' => "four", 
    'f' => "five", 
    'g' => "three", 
    'h' => "two" 
); 

function removeAllValuesMatching($arr, $arg){ 
    foreach ($arr as $key => $value){ 
     if ($arr[$key] == $arg){ 
      unset($arr[$key]); 
     } 
    } 
    return $arr = array_values($arr); 
} 

print_r(removeAllValuesMatching($arr, "two")); 

?>