2012-01-20 24 views
7

Mam prostą tablicę, która zawiera nazwę wszystkich krajów i całkowitą liczbę użytkowników zarejestrowanych na mojej stronie z każdego kraju. To coś takiego:Usuwanie elementu tablicy w pętli foreach

Array (
    [1] => Array ([name] => Afghanistan [total] => 3) 
    [2] => Array ([name] => Albania [total] => 0) 
) 

Próbuję usunąć elementy tablicy (kraje), które mają 0 użytkowników.

Próbowałem z tym kodem i nie działa:

foreach($country as $row) { 
    if ($row['total'] == 0) { 
     unset($row); 
    } 
} 

Co jest nie tak z tym kodem?

+2

możliwy duplikat [Jak usunąć element tablicy w pętli foreach?] (Http://stackoverflow.com/questions/1949259/how-do-you-remove-an-array-element -in-a-foreach-loop) – 7hi4g0

Odpowiedz

24

Jeśli usuniesz lokalną zmienną tylko przez unset($row).

Zamiast pobrać klucz i wyjąć że:

foreach ($country as $i => $row) { 
    if ($row['total'] == 0) { 
     unset($country[$i]); 
    } 
} 
+0

Zadziałało. Dzięki za pomoc. –

+0

Ale co, jeśli dodasz znak '&' przed '$ row' (Przekaż jako odniesienie)? – Houssni

3

Foreach tworzy kopie kluczy/wartości na tablicy jesteś zapętlenie nad, więc wszystko co robisz jest wyłączające lokalną kopię, a nie oryginał, który faktycznie znajduje się w tablicy. Uzyskiwanie dostępu do tablicy bezpośrednio

foreach($country as $key => $row) { 
    if ($row['total'] == 0) { 
    unset($country[$key]); 
    } 
} 

, lub odniesienia, jest wyłączony, a potem filtry NULL elementy:

foreach($country as &$row) { 
    if ($row['total'] == 0) { 
     $row = (unset) $row; 
    } 
} 
unset($row); 
$country = array_filter($country); 
+2

Odniesienie nie zadziała btw. Będzie to nadal tylko zmienna lokalna. ;) – NikiC

+0

Dodatkowo dobrze jest umieścić 'unset ($ val)' po pętli 'foreach', aby usunąć odwołanie (to również oszczędziłoby ostatniego akapitu odpowiedzi). – hakre

0

Ponieważ $ rząd jest wartością, a nie cały element.

Spróbuj: foreach ($ kraj jako $ key => $ value) { if ($ row [ 'całkowity'] == 0) { rozbrojony ($ kraj [$ key]); } }

Powiązane problemy