从数组中删除包含“$string”的所有元素


Deleting all elements that contain '$string' from arrays

我想从包含$str$array中删除所有项目。 $str='foo' .

我希望删除的元素之后的元素"移回"。

例如:
$array = array('1', '0', ' ', '1')我希望$array[3]丢失其内容,并接收$array[4]的内容,该内容将被删除。

尝试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)
}

试试这个:

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

(这当然假设字符串仅由"foo"组成)。

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