2016-08-22 4 views
-1

У меня есть массив внутри другого массива - вот мой print_r:Удаление элемента из массива в другой массив

Array 
(
    [0] => Array 
     (
      [ProductID] => 180 
      [ProductName] => Male Thread BSPT Coupling 
      [ProductImage] => 054-male-thread-bspt-coupling.jpg 
      [Termination] => 1/4\" 
      [Length] => 58 
      [Diameter] => 23 
      [Part] => 054CVMT14SNN 
      [Price] => 3.26 
      [quantity] => 22 
     ) 

    [1] => Array 
     (
      [ProductID] => 183 
      [ProductName] => Male Thread BSPT Plug 
      [ProductImage] => 054-male-thread-bspt-plug.jpg 
      [Termination] => 1/4\" 
      [Length] => 38 
      [Diameter] => 
      [Part] => 054PNMT14SXN 
      [Price] => 0.67 
      [quantity] => 22 
     ) 

) 

нужно удалить из массива, где часть = X

+3

См. Http://stackoverflow.com/q/1503579/3933332 – Rizier123

+0

Hi Rizier - К сожалению, я уже был на этой странице и не нашел решение для моего массива внутри и массива на PHP 5.3 –

+0

Кроме того, что 5.3 уже мертвый в течение 2 лет, он должен работать. Вы получаете какую-либо ошибку? – Rizier123

ответ

0

Попробуйте это (demo):

$arr = array(
     'a' => array('h' => 10, 'w' => 40, 'd' => 100, 'part' => 'A10'), 
     'b' => array('h' => 20, 'w' => 30, 'd' => 400, 'part' => 'A20'), 
     'c' => array('h' => 30, 'w' => 20, 'd' => 900, 'part' => 'A30'), 
     'd' => array('h' => 40, 'w' => 10, 'd' => 1600, 'part' => 'A40'), 
    ); 
    $part = 'A10'; 
    $res = array_filter($arr, function ($elem) use ($part) { 
     return $elem['part'] != $part; 
    }); 

    print_r($res); 

$res будет входным массивом, исключая любой элемент, который имеет свой элемент part, установленный на A10.

+0

Hi Ahmad - Спасибо очень для этого. К сожалению, веб-сайт находится на веб-сервере, который использует PHP 5.3, и некоторые из них не работают в этой версии. –

+0

как получилось? array_filter доступен с PHP 4> = 4.0.6. btw также доступны, так как 5.3 :) –

+0

Привет, Ahmad, У меня есть это, чтобы работать сейчас - но он удаляет один элемент, а затем, когда я иду, чтобы удалить другой, он добавляет предыдущую удаленную обратно в –

-1

Попробуйте это (пожалуйста, обратите внимание, что это приведет к удалению только первое вхождение):

if(($key = array_search($delPartWithThisId, $partsArray)) !== false) { 
    unset($partsArray[$key]); 
} 

Или:

foreach (array_keys($partsArray, $delPartWithThisId, true) as $key) { unset($partsArray[$key]); }

Во второй переменной раствора $delPartWithThisId может быть массивом, как [1,2,3]

Кроме того, я хотел бы предложить, чтобы использовать array_values() реорганизовать индексы массива

+0

это будет искать в исходный массив, для любого элемента, значение которого является '$ delPartWithThisId', а затем отключить его ключ, но учтите, что исходный массив не является одномерным, исходный массив представляет собой массив массивов ** ** –

Смежные вопросы