我想删除$array
中包含$str
的所有项目。 $str='foo'
。
我希望删除元素之后的元素“向后移”。
例如:
$array = array('1', '0', ' ', '1')
我希望$array[3]
丢失其内容,并收到$array[4]
的内容,该内容将被删除。
答案 0 :(得分: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)
}
如果你想替换$ str,你应该使用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)
}
答案 1 :(得分:0)
试试这个:
foreach($array as $v => $a) {
if($a == 'foo') {
unset($array[$v]);
}
}
(当然这假设字符串只包含'foo')。
答案 2 :(得分:0)
$array = preg_grep("/{$str}/i", $array, PREG_GREP_INVERT);