IT박스

foreach 루프 내의 배열에서 객체를 삭제하는 방법은 무엇입니까?

itboxs 2020. 7. 2. 08:03
반응형

foreach 루프 내의 배열에서 객체를 삭제하는 방법은 무엇입니까?


객체 배열을 반복하고 '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
        } 
    }
}

어떤 제안이라도. 감사.


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]);
        } 
    }
}

foreach값에 대한 참조를 사용할 수도 있습니다 .

foreach($array as $elementKey => &$element) {
    // $element is the same than &$array[$elementKey]
    if (isset($element['id']) and $element['id'] == 'searched_value') {
        unset($element);
    }
}

설정 해제에 대한 구문이 유효하지 않은 것 같습니다. 다시 색인화가 없으면 나중에 문제가 발생할 수 있습니다. PHP 배열 섹션을 참조하십시오 .

올바른 구문은 위에 나와 있습니다. 또한 재 인덱싱을위한 배열 값염두에두고 이전에 삭제 한 항목을 인덱싱하지 마십시오.


이 트릭을해야합니다 .....

reset($array);
while (list($elementKey, $element) = each($array)) {
    while (list($key, $value2) = each($element)) {
        if($key == 'id' && $value == 'searched_value') {
            unset($array[$elementKey]);
        }
    }
}

나는 PHP 프로그래머가 아니지만 C #에서는 배열을 반복하는 동안 배열을 수정할 수 없다고 말할 수 있습니다. foreach 루프를 사용하여 요소 또는 제거 할 요소의 색인을 식별 한 다음 루프 뒤의 요소를 삭제하려고 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/2304570/how-to-delete-object-from-array-inside-foreach-loop

반응형