Без перестройки массива?На самом деле, нет.Но это все еще просто.
Перестройте массив игл с ключами, соответствующими значениям c_id
:
$o_needles = array();
foreach ($needles as $needle) {
$o_needles[$needle->c_id] = $needle;
}
Затем удалите все узлы в стеке, у которых значение c_id
соответствует ключув модифицированном массиве игл:
foreach ($stack['target_p'] as $key => $obj) {
if (array_key_exists($obj->c_id, $o_needles)) {
unset($stack['target_p'][$key]);
}
}
Производительность / сложность O (n + m) .
Если бы вы использовали такую функцию, как array_map
, array_walk
, array_filter
или вложенный foreach
, вам нужно будет просмотреть каждую из игл для каждого элемента в стеке, что будет менее эффективно, особенно с большими наборами данных ( O (n* м) ).