2010-06-17 18 views

回答

66

要搜索一個數組中的元素,你可以使用array_search函數並從數組中刪除元素,您可以使用unset函數。例如:

<?php 
$hackers = array ('Alan Kay', 'Peter Norvig', 'Linus Trovalds', 'Larry Page'); 

print_r($hackers); 

// Search 
$pos = array_search('Linus Trovalds', $hackers); 

echo 'Linus Trovalds found at: ' . $pos; 

// Remove from array 
unset($hackers[$pos]); 

print_r($hackers); 
?> 

您可以參考:http://www.php.net/manual/en/ref.array.php瞭解更多與陣列相關的功能。

+7

但是,如果array_search由於沒有發現而返回'false',則第一個數組值將被移除。 – algorhythm 2014-09-08 15:20:02

+0

如果存在沒有完全匹配?如何執行通配符搜索? – 2014-11-12 02:26:58

+2

您可以通過if(pos === false)來測試是否存在匹配 – Ire 2016-03-16 07:46:39

13

你需要先找到陣列的關鍵,這可以通過使用array_search()

一旦這樣做來完成,使用unset()

<?php 
$array = array('apple', 'orange', 'pear'); 

unset($array[array_search('orange', $array)]); 
?> 
+0

這是結果 陣列([0] = > apple [1] => orange [2] => pear [3] => green) 警告:第5行的C:\ wamp \ www \ test \ test.php中array_search()的參數計數錯誤 Array ([0] => apple [1] => orange [2] => pear [3] => green) – learner 2010-06-17 06:43:11

+1

@learner http://de3.php.net/manual/en/function中缺少乾草堆參數.array-search.php - 手冊是你的朋友。 – Gordon 2010-06-17 06:45:28

+0

是的。 這將工作 $ array = array('apple','orange','pear','green'); unset($ array [array_search('orange',$ array)]); 但數組序列丟失。如何糾正該錯誤 – learner 2010-06-17 06:49:17

1

首先,正如其他人所提到的,您將使用如下所示的「array_search()」 &的「unset()」 methodsas: -

<?php 
$arrayDummy = array('aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg'); 
unset($arrayDummy[array_search('dddd', $arrayDummy)]); // Index 3 is getting unset here. 
print_r($arrayDummy); // This will show the indexes as 0, 1, 2, 4, 5, 6. 
?> 

現在重新指數在同一個陣列,不排序任何的數組值,則需要使用「array_values()」的方法,如下圖所示: -

<?php 
$arrayDummy = array_values($arrayDummy); 
print_r($arrayDummy); // Now, you will see the indexes as 0, 1, 2, 3, 4, 5. 
?> 

希望它能幫助。

+1

但是,如果array_search由於找不到任何內容而返回false,則第一個數組值將被刪除。 – algorhythm 2014-09-08 15:23:36

+0

@algorhythm - 謝謝指出!我會建議每個人都應該使用您提供的解決方案! – 2014-09-08 17:48:02

7

如果您想使用上述任何代碼,請注意,當「乾草堆」中找不到「needle」時array_search返回FALSE,因此這些樣本會取消設置第一個(零索引)項目。使用這個來代替:

<?php 
$haystack = Array('one', 'two', 'three'); 
if (($key = array_search('four', $haystack)) !== FALSE) { 
    unset($haystack[$key]); 
} 
var_dump($haystack); 

上面的例子將輸出:

Array 
(
    [0] => one 
    [1] => two 
    [2] => three 
) 

,這很好!

+0

+1這工作完美 – algorhythm 2014-09-08 16:48:45

61
<?php 
$my_array = array('sheldon', 'leonard', 'howard', 'penny'); 
$to_remove = array('howard'); 
$result = array_diff($my_array, $to_remove); 
?> 
+3

這是非常好的 – Alex 2014-02-07 10:06:41

+5

可以刪除多個值沒有循環! – dfmiller 2014-03-04 22:15:15

+1

+1避免了檢查array_search的返回值的麻煩 – rinogo 2014-07-15 14:25:41

-1

爲了找到和在陣列中刪除的值的多個實例,我已用下面的代碼

$list = array(1,3,4,1,3,1,5,8); 

$new_arr=array(); 

foreach($list as $value){ 

    if($value=='1') 
    { 
     continue; 
    } 
    else 
    { 
     $new_arr[]=$value; 
    }  
} 


print_r($new_arr); 
+0

它沒有按照請求使用PHP數組函數... – algorhythm 2014-09-08 15:25:34

4

這種解決方案的@組合彼得用於刪除多次出現和@chyno溶液溶液消除第一次發生。這就是我正在使用的。

/** 
* @param array $haystack 
* @param mixed $value 
* @param bool $only_first 
* @return array 
*/ 
function array_remove_values(array $haystack, $needle = null, $only_first = false) 
{ 
    if (!is_bool($only_first)) { throw new Exception("The parameter 'only_first' must have type boolean."); } 
    if (empty($haystack)) { return $haystack; } 

    if ($only_first) { // remove the first found value 
     if (($pos = array_search($needle, $haystack)) !== false) { 
      unset($haystack[$pos]); 
     } 
    } else { // remove all occurences of 'needle' 
     $haystack = array_diff($haystack, array($needle)); 
    } 

    return $haystack; 
} 

也可以看看這裏:PHP array delete by value (not key)

+0

從我身邊+1,爲你的* SUPERB *答案,並指出我的錯! 哦,順便說一句,你也可以編輯任何人的答案,並更新它,並加上你的名字,標記錯誤的部分。 – 2014-09-08 17:51:11

0

一個功能還沒有被提及的是array_filter。您只需傳遞一個將每個元素作爲參數的回調函數,並且如果該元素應該保留或被刪除,則返回true或false。這也有刪除重複值的好處。

您可以使用它像這樣:

$myArray = array('one', 'two', 'deleteme', 'three'); 
$output = array_filter($myArray, function($val) { return $val != 'deleteme'; }); 

如果你想重新建立索引的數組,你可以將結果傳遞給array_values像這樣:

$output = array_values($output); 
0

這是怎麼了我會做到這一點:

$terms = array('BMW', 'Audi', 'Porsche', 'Honda'); 
// -- purge 'make' Porsche from terms -- 
if (!empty($terms)) { 
    $pos = ''; 
    $pos = array_search('Porsche', $terms); 
    if ($pos !== false) unset($terms[$pos]); 
} 
相關問題