[php] 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]);
}
}
}
답변
설정 해제에 대한 구문이 유효하지 않은 것 같습니다. 다시 색인화가 없으면 나중에 문제가 발생할 수 있습니다. PHP 배열 섹션을 참조하십시오 .
올바른 구문은 위에 나와 있습니다. 또한 재 인덱싱을위한 배열 값 을 염두에두고 이전에 삭제 한 항목을 인덱싱하지 마십시오.
답변
foreach
값에 대한 참조를 사용할 수도 있습니다 .
foreach($array as $elementKey => &$element) {
// $element is the same than &$array[$elementKey]
if (isset($element['id']) and $element['id'] == 'searched_value') {
unset($element);
}
}
답변
이 트릭을해야합니다 …..
reset($array);
while (list($elementKey, $element) = each($array)) {
while (list($key, $value2) = each($element)) {
if($key == 'id' && $value == 'searched_value') {
unset($array[$elementKey]);
}
}
}
답변
주요 답변에주의하십시오.
와
[['id'=>1,'cat'=>'vip']
,['id'=>2,'cat'=>'vip']
,['id'=>3,'cat'=>'normal']
그리고 함수를 호출
foreach($array as $elementKey => $element) {
foreach($element as $valueKey => $value) {
if($valueKey == 'cat' && $value == 'vip'){
//delete this particular object from the $array
unset($array[$elementKey]);
}
}
}
그것은 반환
[2=>['id'=>3,'cat'=>'normal']
대신에
[0=>['id'=>3,'cat'=>'normal']
unset은 배열을 다시 색인화하지 않기 때문입니다.
다시 색인을 생성합니다. (필요한 경우)
$result=[];
foreach($array as $elementKey => $element) {
foreach($element as $valueKey => $value) {
$found=false;
if($valueKey === 'cat' && $value === 'vip'){
$found=true;
$break;
}
if(!$found) {
$result[]=$element;
}
}
}
답변
나는 PHP 프로그래머가 아니지만 C #에서는 배열을 반복하는 동안 배열을 수정할 수 없다고 말할 수 있습니다. foreach 루프를 사용하여 요소 또는 제거 할 요소의 색인을 식별 한 다음 루프 뒤의 요소를 삭제하려고 할 수 있습니다.