Я повторяю массив объектов и хочу удалить один из объектов на основе его свойства id, но мой код не работает.
foreach($array as $element) {
foreach($element as $key => $value) {
if($key == 'id' && $value == 'searched_value'){
//delete this particular object from the $array
unset($element);//this doesn't work
unset($array,$element);//neither does this
}
}
}
Любые предложения. Спасибо.
Ответ 1
foreach($array as $elementKey => $element) {
foreach($element as $valueKey => $value) {
if($valueKey == 'id' && $value == 'searched_value'){
//delete this particular object from the $array
unset($array[$elementKey]);
}
}
}
Ответ 2
Вы также можете использовать ссылки на значения foreach
:
foreach($array as $elementKey => &$element) {
// $element is the same than &$array[$elementKey]
if (isset($element['id']) and $element['id'] == 'searched_value') {
unset($element);
}
}
Ответ 3
Я не очень программист php, но могу сказать, что в С# вы не можете изменять массив, итерации через него. Вы можете попробовать использовать ваш цикл foreach для идентификации индекса элемента или элементов для удаления, а затем удалить элементы после цикла.
Ответ 4
Похоже, ваш синтаксис для отмены недействителен, и отсутствие переиндексации может вызвать проблемы в будущем. Смотрите: Раздел о массивах PHP.
Правильный синтаксис показан выше. Также имейте в виду array-values для переиндексации, поэтому вы никогда не индексируете то, что вы ранее удалили.
Ответ 5
Это должно сделать трюк.....
reset($array);
while (list($elementKey, $element) = each($array)) {
while (list($key, $value2) = each($element)) {
if($key == 'id' && $value == 'searched_value') {
unset($array[$elementKey]);
}
}
}