2013-03-17 6 views
0

У меня есть массив, который отформатирован следующим образом:Удаление элементов из массива

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [LASTNAME] => Name 
      [FIRSTNAME] => Name 
    ) 
    [1] => Array 
     (
      [id] => 2 
      [LASTNAME] => Name 
      [FIRSTNAME] => Name 
    ) 

и т.д. Я хочу, чтобы удалить LastName и другие элементы из каждой секции массива.

Я пробовал следующий код, но безрезультатно.

foreach($s as $key => $object) { 

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

      if ($key == "LASTNAME") { 
       unset($s['LASTNAME']); 
       } 
      } 
     } 

Любые идеи о том, что я делаю неправильно? Заранее спасибо.

+3

Внутренний цикл перезаписывая переменную '$ key'. –

+0

Ну DUH !! Это исправило это. Слава богу, я за столом, а не за рулем. Будучи этой глупостью, я могу причинить серьезный вред :-) –

+0

Спасибо. Я ценю это. –

ответ

0

Вы отключаете неправильный массив.

Сохранение текущего ключа для каждого цикла поможет:

foreach($s as $key1 => $object) { 
    foreach($object as $key2=>$value) { 
     if ($key2 == "LASTNAME") { 
      unset($s[$key1][$key2]); 
     } 
    } 
} 
1

Попробуйте это:

foreach ($s as &$object) { 
    unset($object['LASTNAME']); 
} 

ваша проблема в том, что вы работаете на копиях, & даст вам ссылку, также как это показано в моем примере, вам не нужно перебирать массив, чтобы проверить, есть ли в нем определенный ключ, просто удалите его - unset не произведет никакой ошибки, если его там нет.


даже в вашем примере вы пытаетесь удалить 'LASTNAME' из $s вместо своего ребенка, но в любом случае, просто попробуйте мой ответ, и он должен работать для вас;)

0
<?php 
$array = Array(
    0 => Array(
      'id' => 1, 
      'LASTNAME' => 'Name', 
      'FIRSTNAME' => 'Name' 
    ), 
    1 => Array(
      'id' => 2, 
      'LASTNAME' => 'Name', 
      'FIRSTNAME' => 'Name' 
    ) 
); 

foreach($array as $key=>$value){ 
    unset($array[$key]['LASTNAME']); 
} 

echo '<pre>',print_r($array),'</pre>'; 
?> 
Смежные вопросы