2013-10-22 50 views
-1

我想要刪除$array中包含$str的所有項。 $str='foo'

我想要刪除的元素後面的元素「移回」。

例如: $array = array('1', '0', ' ', '1')
我想$array[3]失去它的內容,並接收$array[4]的內容,這將被刪除。

+3

你能解釋一下你爲了做這個嘗試?我的意思是,你至少已經嘗試了'foreach()'和'strpos()'對嗎? –

+0

你的意思是你想從數組中刪除項目? – Aris

+0

與'foreach()'和'strpos()'我不能刪除他們alond他們的'id' –

回答

1

嘗試array_filter

$array=array('a' => '123', 'b' => 34); 
$str = '2'; 
var_dump(
    array_filter(
    $array, function($element) use ($str) {if(strpos($element, $str) === false) return true;} 
    ) 
); 

輸出:

array(1) { 
    ["b"]=> 
    int(34) 
} 

如果你想更換$海峽,你應該使用array_map

var_dump(array_map(
    function($element) use ($str) { return str_replace($str, '', $element);}, $array) 
); 

輸出:

array(2) { 
    ["a"]=> 
    string(2) "13" 
    ["b"]=> 
    string(2) "34" 
} 

下一個條件的最終解決方案「我想要刪除的元素之後的元素'移回'。」

$values = array_filter($array, function($element) use ($str) {if(strpos($element, $str) === false) return true;}); 
$keys = array_slice(array_keys($array), 0, count($values)); 
var_dump (array_combine($keys, $values)); 

輸出:

array(1) { 
    ["a"]=> 
    int(34) 
} 
+0

或者,而不是測試原因,並返回true,如果是true,只要做:'返回(strpos($ element,$ str)=== false);' –

+0

是的,這將是好的,但我想'array ['a']'成爲'int(34)'。 –

+0

好的,檢查我的更新。 – ziollek

0

嘗試了這一點:

foreach($array as $v => $a) { 
    if($a == 'foo') { 
     unset($array[$v]); 
    } 
} 

(當然,這假定該字符串僅由 '富' 的)。

+1

通過引用foreach'-ing不工作,就像你似乎認爲它沒有... [不設置一個參考不會全部取消設置](http://codepad.org/cTJzUHzF)。 – Wrikken

+0

@Wrikken我的不好,謝謝你指出。我記得在過去(幾​​個月前)使用這種方法的不同之處。我已經修復了代碼。 – Crackertastic

0
$array = preg_grep("/{$str}/i", $array, PREG_GREP_INVERT);