2014-12-04 3 views
0

나는 내 머리를 얻을 수없는 뭔가가 있습니다.Foreach는 하나의 항목을 많이 반환합니다.

foreach 루프를 사용하여 배열을 처리하고 있습니다. 배열에는 3 개의 항목이 있습니다. 나는 다른 배열로 다시 저장되는 이러한 항목으로 몇 가지 작업을 수행합니다. foreach 루프 후에 배열에 4 개가 아닌 4 개의 항목이 있습니다 ...이 동작을 일으키는 "숨겨진"항목이 있는지 확인하기 위해 var_dump 및 print_r을 사용하여 프로세스의 모든 부분을 검사했지만 찾을 수 없습니다. .

쿼리의 결과가 배열로 바뀌면 결과 집합은 3 행입니다. 다음은 코드의 예입니다

echo sizeOf($arrWithItems); //returns 3 
$i=0; 
$newArrWithItems = array(); 

foreach($arrWithItems as $item){ 
     $i++; //add one to the counter (only for testing) 

     // do stuff with $item for example: 
     $newArrWithItems[$item->id]['name'] = $item->name; 
} 

echo sizeOf($newArrWithItems) //returns 4 
echo $i //returns 3 

이상한 것은 내가 foreach 루프 내에서 SIZEOF ($ newArrWithItems)를 에코 때, 그것은 0으로 시작하고, 2와 3은 그래서 건너와 더 나아가이다 그러나 count ($ i)는 한 걸음 씩 건너 뛰지 않습니다.

내가 여기에 무엇을 놓치고 ... 또는 거기에 더 많은 팁을 howto 디버그가 있습니까? 나는 $ arrWithItems을 var_dump로 이미 검사했는데, 0부터 2까지의 3 개의 항목 만 표시합니다.이 결과 집합에서만 문제가 발생하지는 않지만이 foreach 루프에서 처리되는 모든 배열에 하나의 항목이 추가됩니다 .

+1

: 그 배열 인 경우, 여기에 간단한 예제입니다 코드의이 부분에 도달하기 전에 완전히 관련성이 없습니다. –

+0

아마도 코드에서 $ item을 사용하여 물건을 다룰 것입니다. 코드의 해당 부분에서'$ i' 또는'$ arrWithItems'이 사용됩니까? – RichardBernards

+0

는'var_dump ($ newArrWithItems)'을 시도 했습니까? 여분의 요소는 무엇입니까? –

답변

1

foreach 루프 전에 넣어이 :

$newArrWithItems = array(); 

내가 노력하고 foreach 루프를 시작하기 전에이 3

0

당신이 $ newArrWithItems가 비어 있는지 확실와 같은 결과를 보여? 방금 ​​'foreach는'전에 코드에이를 추가 할 수 있음 :

$newArrWithItems = array(); 
0

위해서 var_dump와 다시 비교 한 후 내가 실수를 발견했다. 그것은 실제로 $ Arr에 [$ item-> id]가 설정되지 않은 "$ item을 가진 물건"에있었습니다.

0

$ arrWithItems가 ArrayObject 또는 배열인지 여부는 명확하지 않습니다. 우리가 알고있는 모두를 위해, 그것은 뭔가 -

$arrWithItems = array(
    array("id"  => 1, 
     "name"  => "Jack", 
     "address" => "Columbus", 
     "age"  => 25), 

    array("id"  => 3, 
     "name"  => "Hyam", 
     "address" => "Wyan", 
     "age"  => 26), 

    array("id"  => 10, 
     "name"  => "Jenny", 
     "address" => "Norfolk", 
     "age"  => 25), 
); 

$newArrWithItems = array(); 

foreach($arrWithItems as $key=>$item){ 
    // do stuff with $item for example: 
    $id = $item['id']; 
    $newArrWithItems["$id"]["name"] = $item['name']; 
} 
echo sizeOf($newArrWithItems); //returns 3 
당신은 그러므로 어떠한 가정도 그것에 대해 수행 할 수 없습니다 코드에서`$ newArrWithItems`를 초기화하는 것 같지 않는
관련 문제