-1

$arrayを含むすべてのアイテムを削除したい$str$str='foo'.

削除された要素の後にある要素を「シフトバック」したい。

例: のコンテンツを失い、削除されるのコンテンツを受け取るようにし$array = array('1', '0', ' ', '1')
ます。$array[3]$array[4]

4

3 に答える 3

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)
}
于 2013-10-22T19:53:57.490 に答える
0
$array = preg_grep("/{$str}/i", $array, PREG_GREP_INVERT);
于 2013-10-22T20:19:10.433 に答える
0

これを試してください:

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

(もちろん、これは文字列が 'foo' だけで構成されていることを前提としています)。

于 2013-10-22T19:51:57.790 に答える