эффективное удаление элементов в массиве php

98
7

Я делал это:

 $attributes = array("a", "b", "c", "d","e","f", "g","h" ,"i","j","k","l");
foreach($all as $p) {
foreach($attributes as $key => $a) {
if (!$p->getAttribute($a)) {
unset($attributes[$key]);
}
}
}

Но unset, похоже, сжимает массив $attributes в цикле, а затем запрашивает значения unsets.

EDIT: Это не то, что происходит. Реальная проблема заключается в том, что, поскольку это вложенные циклы, если !$p->getAttribute($a) возвращает false, я не должен его откладывать в массиве, так как первый цикл foreach($all as $p) может предоставить $ p с атрибутом, где он возвращает true, и, следовательно, его нужно сохранить.

Мне нужно это, чтобы if !$p->getAttribute($a) тогда я хочу удалить соответствующие атрибуты $ a из $. Какой самый эффективный способ сделать это?

спросил(а) 2021-01-25T16:52:38+03:00 4 месяца, 3 недели назад
1
Решение
132

Это то, что я наконец сделал:

$all_attributes = array("a", "b", "c", "d","e","f", "g","h" ,"i","j","k","l");
$attributes = array();
foreach($allpkg as $p) {
foreach($all_attributes as $key=> $a) {
if ($p->getAttribute($a) && (!in_array($a, $attributes))) {
array_push($attributes,$a);
}
}
}

EDIT: Решение было отредактировано из-за моего EDIT в самом вопросе... (aaawww, извините за путаницу). Может быть, не самый элегантный и, конечно, не самый эффективный (копирование всех необходимых элементов...). Но я четко контролирую, что происходит, и это работает :)

ответил(а) 2021-01-25T16:52:38+03:00 4 месяца, 3 недели назад
45

Если вам нужно сделать это много раз, я предлагаю вам вернуть массив атрибутов из $ p из метода в классе $ p и использовать


array_diff($attributes, $p->getAttributes());

ответил(а) 2021-01-25T16:52:38+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема