source

Foreach 루프에서 어레이 값 설정 해제

lovecheck 2022. 10. 30. 17:59
반응형

Foreach 루프에서 어레이 값 설정 해제

어레이를 통과하여 특정 링크를 확인하고 검출되면 해당 링크를 어레이에서 삭제하도록 foreach 루프가 설정되어 있습니다.

내 코드:

foreach($images as $image)
{
    if($image == 'http://i27.tinypic.com/29yk345.gif' ||
    $image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
    $image == 'http://i42.tinypic.com/9pp2456x.gif')
    {
        unset($images[$image]);
    }
}

그러나 어레이 엔티어는 제거되지 않습니다.그건 아마 와 관련이 있을 것이다.$images[$image]어레이 엔트리의 열쇠가 아니기 때문에 콘텐츠뿐입니까?카운터를 설치하지 않고 할 수 있는 방법이 있나요?

감사해요.

편집: 감사합니다만, 어레이 엔트리가 실제로 삭제되지 않는 또 다른 문제가 있습니다.

새로운 코드:

foreach($images[1] as $key => $image)
{
    if($image == 'http://i27.tinypic.com/29yk345.gif')
    $image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
    $image == 'http://i42.tinypic.com/9pp2456x.gif')
    {
        unset($images[$key]);
    }
}

$images는 현재 2차원 배열로 작동하기 때문에 $images[1]가 필요합니다.확인해보니 어레이 요소를 정상적으로 돌아갔습니다.또한 일부 요소에는 실제로 삭제하고 싶은 URL이 있지만 삭제되지 않는 것도 있습니다.이건 내 거야$images어레이:

Array
(
    [0] => Array
        (
            [0] => useless
            [1] => useless
            [2] => useless
            [3] => useless
            [4] => useless
        )

    [1] => Array
        (
            [0] => http://i27.tinypic.com/29yk345.gif
            [1] => http://img3.abload.de/img/10nx2340fhco.gif
            [2] => http://img3.abload.de/img/10nx2340fhco.gif
            [3] => http://i42.tinypic.com/9pp2456x.gif
        )

)

감사합니다!

foreach($images as $key => $image)
{
    if(in_array($image, array(
       'http://i27.tinypic.com/29ykt1f.gif',
       'http://img3.abload.de/img/10nxjl0fhco.gif',
       'http://i42.tinypic.com/9pp2tx.gif',
    ))
    {
        unset($images[$key]);
    }
}

시험해 보세요.

foreach ($images[1] as $key => &$image) {
    if (yourConditionGoesHere) {
        unset($images[1][$key])
    }
}
unset($image); // detach reference after loop  

보통.foreach는 어레이의 복사본에서 작동하므로 변경 내용은 해당 복사본에 적용되며 실제 어레이에는 영향을 주지 않습니다.

따라서 다음 방법으로 값을 설정 해제해야 합니다.$images[$key];

에 대한 참조&$image는, 루프가 어레이의 카피를 작성해 메모리를 낭비하는 것을 방지합니다.

첫 번째 질문에 답하려면(편집 후) 설정을 해제해야 합니다($images[1][$key];

이제 PHP가 어떻게 동작하는지에 대해 설명하겠습니다.포어치 루프에서 어레이 요소를 안전하게 해제할 수 있습니다.또, 어레이 항목의 유무는 문제가 되지 않습니다.다음 코드를 참조하십시오.

$a=[1,2,3,4,5];
foreach($a as $key=>$val)
{
   if ($key==3) unset($a[$key]);
}
print_r($a);

다음의 출력이 있습니다.

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [4] => 5
)

보시는 것처럼 포어치루프 내에서 수정 설정을 해제하면 모든 것이 정상적으로 동작합니다.

어레이 요소의 인덱스를 사용하여 어레이에서 제거할 수 있습니다. 다음 번에 어레이 요소를 사용할 때$listvariable을 지정하면 배열이 변경된 것을 알 수 있습니다.

이런 거 해봐

foreach($list as $itemIndex => &$item) {

   if($item['status'] === false) {
      unset($list[$itemIndex]);
   }

}

$image고객님의 경우 아이템의 값이지 키가 아닙니다.다음 구문을 사용하여 키도 가져옵니다.

foreach ($images as $key => $value) {
    /* … */
}

이것으로 아이템을 삭제할 수 있습니다.unset($images[$key]).

한 가지 해결책은 아이템의 키를 사용하여 아이템을 삭제하는 것입니다.Foreach를 사용하여 루프할 때 키와 값을 모두 삭제할 수 있습니다.

예:

$arr = array(
    'a' => 123,
    'b' => 456,
    'c' => 789, 
);

foreach ($arr as $key => $item) {
    if ($item == 456) {
        unset($arr[$key]);
    }
}

var_dump($arr);

마지막으로 다음 어레이를 제공합니다.

array
  'a' => int 123
  'c' => int 789


같은 .

foreach($images as $key => $image)
{
    if($image == 'http://i27.tinypic.com/29yk345.gif' ||
    $image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
    $image == 'http://i42.tinypic.com/9pp2456x.gif')
    {
        unset($images[$key]);
    }
}

foreach($images as $key=>$image)                                
{               
   if($image == 'http://i27.tinypic.com/29ykt1f.gif' ||    
   $image == 'http://img3.abload.de/img/10nxjl0fhco.gif' ||    
   $image == 'http://i42.tinypic.com/9pp2tx.gif')     
   { unset($images[$key]); }                               
}

!!key=>$image로 지정됩니다.

cause $image는 값이기 때문에 $cause[$image]는 의미가 없습니다.

또,

$i--;

각 설정 후 요소를 건너뛰지 않도록 설정/

설정을 했을 때$item[45]는 for-loop이다$item[45] -어느쪽이었나[46]설정을 해제하기 전에.이렇게 하지 않으면 설정 해제 후 항상 요소를 건너뜁니다.

이 늦어서 에서도 같은 했는데, 최근 PHP에서도 같은 문제가 발생했는데, PHP를 사용하지 않는 어레이로 작업할 때$key => $value 「」, 「」를 foreach이 변수 합니다.$image이 코드를 사용하면 문제가 해결됩니다.

for ($i=0; $i < count($images[1]); $i++)
{

    if($images[1][$i] == 'http://i27.tinypic.com/29yk345.gif' ||

    $images[1][$i] == 'http://img3.abload.de/img/10nx2340fhco.gif' ||

    $images[1][$i] == 'http://i42.tinypic.com/9pp2456x.gif')

    {

        unset($images[1][$i]);

    }

}

var_dump($images);die();

언급URL : https://stackoverflow.com/questions/2008866/unsetting-array-values-in-a-foreach-loop

반응형