동일한 루프에서 배열을 수정하여 Foreach 루프의 배열 교체

StackOverflow https://stackoverflow.com/questions/229491

  •  04-07-2019
  •  | 
  •  

문제

foreach($arrayOne as $value){
    do function
}

위의 예에서는 $ arrayone을 루프로 전달하고, $ arrayone의 일부 요소를 제거한 다음 루프가 거짓으로 반환 될 때까지 남은 요소에 루프가 감소 된 $ arrayone을 통과하게하는 기능 작동을 원합니다. .

추천?

도움이 되었습니까?

해결책

배열 항목의 값을 수정하려면 참조로 사용하십시오. 배열 항목을 완전히 제거하려면 키 / 값 쌍을 분할하십시오.

$arrayOne = array('example', 'listing of', 'stuff');

foreach ($arrayOne as $key => &$value) {
    $value .= ' alteration';

    if ($value == 'listing of alteration') {
        unset($arrayOne[ $key ]);
    }

}

위의 코드는 배열의 각 항목의 끝에 텍스트 "변경"을 추가합니다. 또한 "변경 목록"과 일치 할 때 두 번째 색인을 제거합니다. PHP 5.2에서 테스트

다른 팁

배열의 일부 요소를 제거하려면 기능이 필요합니까?

그렇다면 사용할 수 있습니다 Array_Filter.

나는 두 개의 배열을 갖는 것이 좋습니다.
데이터가 포함 된 하나 -Datuarray,
다른 하나는 처음에는 비어 있습니다
그리고 첫 번째 ForeachLoop에서 자격이있는 것은 두 번째 배열로 밀고 그 끝에 첫 번째 배열을 비우고 두 배열의 식별자를 교체하고 (DataArray가 빈 알레가되고 그 반대로) false 또는 무엇이든 반복 할 때까지 반복하십시오.

Rabbit은 값 편집 값을 사용하고 INDET을 Foreach 루프에서 UnSet에 대한 인덱스를 사용하는 정답을 가지고 있습니다 (투표 할 것입니다. 그러나 이것은 내 첫 번째 게시물이므로 아직 15 회 반복이 없습니다. 죄송합니다).

참조를 값을 편집하는 데 필요한 함수로 전달하는 경우 참조를 사용해야합니다. 값을 제거하려면 배열을 참조로 전달해야합니다.

더 많은 참조 생성을 방지하기 위해 제거할지 여부에 대한 기능을 반환하는 것이 좋습니다. 예를 들어

foreach ($array AS $key => &$value) {
    //& reference only needed if execFunction must edit $value
    if (execFunction(&$value)) { 
        unset($array[$key]);
    } else {
        $value['exec_failed']+=1;
    }
}
unset($value);

또한 $ 값 참조는 루프의 범위를 지나서 지속되므로 트레일 링되지 않습니다.

마지막으로 생각하면 배열을 여러 번 루프하고 싶었던 것처럼 들렸습니다. 루프가 어떻게 실행되는지에주의를 기울이십시오.

도움을 주셔서 감사합니다. Unset () 함수는 결국 오늘날의 특정 요구에 유용한 것입니다. Unset () 사용에 대한 짧은 이야기는 다음과 같습니다.

//array to be processed
$one=array('1','2','3');
//array of terms previously defined as a group to compare against
$against=array('1','2');

foreach($one as $key=>$value){

    //pull out matching terms   
    $match=array_intersect($one,$against);
    //my need is to sum grouped numbers
    $sum=array_sum($match);
    echo $sum."<br />";

    //remove matching terms from original array
    foreach($match as $key=>$value){
        unset($one[$key]);
    }
}
//now a parent looping function will process the remaining array elements. In this case, the only one left is '3'.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top