как удалить определенные элементы из массива с помощью одного foreach переполнения стека

есть ли способ, если я хочу, чтобы код выглядел так

foreach ($a as $key=>$value) {
if (( $value['someprop'] == 'some prop' ) || ( $value['someprop'] == 'some other prop' ))
array_splice($a, $key, 1);

потому что ключи массива сдвигаются с помощью array_splice

1

Решение

используя цикл for с обратным отсчетом от конца массива:

(таким образом у вас не будет проблем с изменением индексов)

for($i = count($myArray); $i>0; $i--)
{
$value = $myArray[$i];
if (( $value['someprop'] == 'some prop' ) || ( $value['someprop'] == 'some other prop' ))
array_splice($myArray, $i-1, 1);
}
1

Другие решения

Используйте более элегантный array_filter вместо:

$a = [
['someprop' => 'some prop'],
['someprop' => 'not some prop'],
['someprop' => 'some other prop'],
];

Метод:

$filtered = array_filter($a, function($value) {
return !($value['someprop'] == 'some prop' || $value['someprop'] == 'some other prop');
});

print_r ($ фильтрованное):

Array
(
[1] => Array
(
[someprop] => not some prop
)

)

http://php.net/manual/en/function.array-filter.php

1

По вопросам рекламы [email protected]