2008-10-22 79 views
0

我認爲這樣的問題是我不喜歡使用PHP的原因。該手冊很好,如果你能找到你想要的東西。閱讀Array Functions後,我沒有看到提供我需要的功能的人。是否有PHP函數可以從數組中移除具有特定值的任何/所有鍵/值對?

我有一個數組(在我的情況,數字索引),我要掃描特定的值,如果它的存在,將其刪除。然後,當該值的所有實例都被刪除時,我想使用array_values重新排列陣列。

+0

我很好奇,爲什麼這是downvoted ... – 2008-10-22 12:42:04

+0

是啊,我也一樣。也許是因爲你對語言的暗示批評......啊。 – 2008-10-22 12:45:49

回答

6

array_diff是你想要的。

$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 

結果:"blue"

+0

謝謝。如果這被稱爲array_prune,array_remove或其他更具描述性的內容,我認爲它會有所幫助。再次感謝。 – 2008-10-22 12:43:49

2

只需添加到這個...

和array_diff似乎顯示不出現第二個數組中的第一個數組中的元素。它不顯示那些只出現在一個或另一個數組中的元素。

例如

<? 
$test = "hello"; 
$array1 = array("a" => "green", "red", "bicycle", "red"); 
$array2 = array("b" => "green", "yellow", "red", "blue", "yellow", "pink"); 
$result = array_diff($array1, $array2); 
print_r ($result); 
?> 

回報

Array 
(
    [1] => bicycle 
) 
0

我喜歡和array_diff功能,但我有我的一個劇本之一,如果你不想傳下去數組:

function array_unset_value($value, &$array) { 
    $key = array_search($value, $array); 
    while ($key !== false) { 
     unset($array[$key]); 
     $key = array_search($value, $array); 
    } 
} 
0

array_filter爲您完成此。你只需要提供一個過濾器回調函數:

function myFilter($Value){ 
    if($Value == 'red'){ 
     return false; 
    } 
    return true; 
} 

$Values = array("a" => "green", "red", "bicycle", "red"); 

$Values = array_filter($Values, 'myFilter'); 

回報:

array { 
    ["a"] => "green" 
    [1] => "bicycle" 
} 

的過濾功能應該爲你希望保持和假對於那些你希望刪除的值返回true。然後,繼續使用array_values重新索引數組。例如

$Values = array_values(array_filter($Values, 'myFilter')); 

如果對象內這樣做的,你要調用該對象中的過濾方法,你可以使用這種形式的回調:

array_filter($Values, array($this,'myFilter')); 
0

重建這個「不可能」的功能,我'd建議:
函數pf_cleanarray($ arraytoclean = false,$ to_explode = false,$ delimiter = false){*} PortalPress.org 2011 [請保留此評論] - 清理一個數組直到NULL或使包含內容的數組;使用時要小心,最好不要使用長度取決於[關聯]陣列


看起來很糟糕,我知道,尤其是沒有在Stackoverflow上縮進。但是在重建時,它可以是一個非常有用的動態工具,只需使用最簡單的函數即可,因此您可以在多陣列上隨意操作鍵和值。關鍵的功能是刪除空值或者使用爆炸創建一個數組,這是乾淨的,但有一點麻煩,它可以變成一個函數,根據鍵或值消除元素。 - Igor M. -

簡單示例:
$ A [0] [0] [0] [0] [0] [0] =「A」;
$ A [1] [0] [0] [0] [0] [0] =「」;
$ A [2] [0] [0] [0] [0] [0] =「」;
$ A [0] [0] [0] [0] [0] [1] =「」;
$ A [1] [0] [0] [0] [0] [1] =「」;
$ A [2] [0] [0] [0] [0] [1] =「」; $ 015 [0] [0] [0] [0]
$ A [1] [0] [0] [0] [0] [2] =「」;
$ A [2] [0] [0] [0] [0] [2] =「」; $ 015 [0] [0] [0] [0]
$ A [1] [0] [0] [0] [0] [3] =「」;
$ A [2] [0] [0] [0] [0] [3] =「」; $ 015 [0] [0] [0]
$ A [1] [0] [0] [0] [0] [4] =「」;
$ A [2] [0] [0] [0] [0] [4] =「」;
$ A [0] [0] [0] [0] [0] [5] =「」;
$ A [1] [0] [0] [0] [0] [5] =「A」;
$ A [2] [0] [0] [0] [0] [5] =「」;
$ A array: Array([0] => Array([0] => Array([0] => Array([0] => Array([0] => Array([0] => A [1] => [2] => [3] => [4] => [5] =>)))))
[1] => Array([0] => Array([0] =>數組([0] =>數組([0] =>數組([0] => [1] => [2] => [3] => [4] => [5] => A) ))))
[2] => Array([0] => Array([0] => Array([0] => Array([0] => Array([0] => [1] =數組([0] =>數組([0] => [2] => [3] => [4] => [5] =>))))))
$ A的結果:
Array Array([0] => Array([0] => Array([0] => Array([0] => A))))
[1] => Array([0] => Array [0] => Array([0] => Array([0] => Array([0] => A))))))
*/
if($ arraytoclean === 0 | | $ arraytoclean){
如果){
如果($ to_explode & & $分界){
$ arraytoclean =爆炸($分界,$ arraytoclean)(is_array($ arraytoclean!);
} else {
$ arraytoclean = Array($ arraytoclean);
}
}
$ nZx = 0;
$ keyarray = array_keys($ arraytoclean);
爲($ NYX = 0; $ NYX $ keydigit = TRUE;
如果($ keyarray [$ NYX] == $ NYX){
$ keydigit = FALSE;
斷裂;
}!
}
爲($ NYX!= 0; $ NYX 如果(is_array($ arraytoclean [$ keyarray [$ NYX]])){
如果($ arraytoclean [$ keyarray [$ NYX]]){
如果(!isset($ retarraytoclean))
$ retarraytoclean = Array}
$ retarraytoclean [(($ keydigit)?$ nZx:$ keyarray [$ nYx])] = $ arraytoclean [$ keyarray [$ nYx]];
$ nZx ++;
}
} else {
$ temparr = pf_cleanarray($ arraytoclean [$ keyarray [$ nYx]]);
if($ temparr){
if(!isset($ retarraytoclean)){
$ retarraytoclean = Array();
}
$ retarraytoclean [(($ keydigit)?$ nZx:$ keyarray [$ nYx])] = $ temparr;
$ nZx ++;
}
}
}
}
如果(isset($ retarraytoclean)){
回報($ retarraytoclean);
} else {
return(NULL);
}
}

相關問題