2016-02-24 3 views
0

У меня есть массив многомерный код вроде этого:PHP Удалить многомерный массив Значение

$array = [ 
    'fruits' => ['apple','orange','grape', 'pineaple'], 
    'vegetables' => ['tomato', 'potato'] 
]; 
$eaten = 'grape'; 
unset($array[$eaten]); 

и то, что мне нужно, чтобы удалить «виноград» из массива, потому что «виноград» уже съедено. как исправить мой код, чтобы отключить «виноград»?

и мой вопрос номер два, если она может быть снята с охраны, есть способ, чтобы сбросить мульти значение как

unset($array,['grape','orange']); 

спасибо за помощь ..

+1

Возможный дубликат [PHP - удалить элемент многомерного массива] (http://stackoverflow.com/questions/21249041/php-remove-element-in-multidimensional-array) – Ivar

+0

Пожалуйста, проверьте мой обновленный ответ. Это может помочь! – Parixit

ответ

2

Вы можете удалить eaten элемент, следующим образом. Используйте array_search() вы найдете key в позиции вашего eaten.

Здесь приведенный ниже код показывает, что в любом многомерном массиве вы можете вызывать данную функцию.

$array = [ 
    'fruits' => ['apple','orange','grape', 'pineaple'], 
    'vegetables' => ['tomato', 'potato'] 
    ]; 
$eaten = 'grape'; 
$array = removeElement($array, $eaten); 


function removeElement($data_arr, $eaten) 
{ 
    foreach($data_arr as $k => $single) 
    { 
     if (count($single) != count($single, COUNT_RECURSIVE)) 
     { 
      $data_arr[$k] = removeElement($single, $eaten); 
     } 
     else 
     { 
      if(($key = array_search($eaten, $single)) !== false) 
      { 
       unset($data_arr[$k][$key]); 
      } 
     } 
    } 
    return $data_arr; 
} 

P.S. Обратите внимание, что вы можете unset() несколько элементов в одном звонке. Но то, как вы используете unset, неверно.

1

Вместо использования unset() я предлагаю вам создать новый массив после удаления выгоды требуемого значения является то, что, исходный массив будет оставаться таким же, вы можете использовать его в дальнейшем:

Пример:

// your array 
$yourArr = array(
       'fruits'=>array('apple','orange','grape', 'pineaple'), 
       'vegetables'=>array('tomato', 'potato') 
       ); 
// remove array that you need 
$removeArr = array('grape','tomato'); 

$newArr = array(); 
foreach ($yourArr as $key => $value) { 
    foreach ($value as $finalVal) { 
     if(!in_array($finalVal, $removeArr)){ // check if available in removal array 
      $newArr[$key][] = $finalVal; 
     }  
    } 
} 

echo "<pre>"; 
print_r($newArr); 

Результат:

Array 
(
    [fruits] => Array 
     (
      [0] => apple 
      [1] => orange 
      [2] => pineaple 
     ) 

    [vegetables] => Array 
     (
      [0] => potato 
     ) 

) 

Объяснение:

Использование этого массива array('grape','tomato');, который удалит значение, заданное в этом массиве.

0

Вот как бы я это сделал.

$array = [ 
    'fruits' => ['apple','orange','grape', 'pineaple'], 
    'vegetables' => ['tomato', 'potato'] 
]; 

$unset_item = 'grape'; 

$array = array_map(function($items) use ($unset_item) { 
    $found = array_search($unset_item, $items); 
     if($found){ 
      unset($items[$found]); 
     }  
    return $items; 
}, $array); 
Смежные вопросы