2013-09-04 2 views
0

У меня довольно простой 2-мерный массив. Я пытаюсь написать функцию, которая обнаруживает, существует ли значение в одном из внутренних массивов. это не так сложно. проблема в том, что мне нужно затем удалить весь внутренний массив после его обнаружения. вот с чем я столкнулся. представляется невозможным, используя foreach петли.в PHP найти, если существует значение внутреннего массива, тогда, если найдено, удалите массив

В любом случае, вот массив. благодаря!

$booksInCart = Array (Array ('bookId' => 344, 'quantity' => 1), 
      Array ('bookId' => 54, 'quantity' => 1), 
      Array ('bookId' => 172, 'quantity' => 2), 
       Array ('bookId' => 3, 'quantity' => 1) 
); 

ответ

1

Используйте цикл foreach с ключом и значением. Используйте ключ, чтобы unset() суб-массива ...

foreach ($booksInCart as $key => $sub) { 
    if ($sub['bookId'] == 172) { 
     unset($booksInCart[$key]); 
    } 
} 
1
// assume you want to delete bookId with 54. 
$bookId = 54; 
$booksInCart = array_filter($booksInCart, function ($var) use ($bookId) { 
    return $var['bookId'] !== $bookId; 
}); 
0

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

foreach ($booksInCart as $id => $inner) { 
    // Second foreach loop because you didn't specify which value you're checking 
    // and I want to insure complete thoroughness 
    foreach ($inner as $key => $value) { 
     if ($key == $requiredkey && $value == $requiredvalue) { 
      unset($booksInCart($id)); 
     } 
    } 
} 
+0

'unset' - это функция, а не ключевое слово языка. –

+0

Спасибо, я забыл скобки; Я добавил их. – DiMono

1

Попробуйте что-то вроде:

<?php 
//Your cart array 
$booksInCart = Array (
    Array ('bookId' => 344, 'quantity' => 1), 
    Array ('bookId' => 54, 'quantity' => 1), 
    Array ('bookId' => 172, 'quantity' => 2), 
    Array ('bookId' => 3, 'quantity' => 1) 
); 

//User function to rebuild the array leaving out the bookID you want removed 
function delete_book_from_cart($bookID, $haystack){ 
    $ret = array(); 
    foreach($haystack as $key=>$item){ 
     if($item['bookId'] == $bookID) continue; 
     $ret[$key]=$item; 
    } 
    return $ret; 
} 

//Use like so 
$booksInCart = delete_book_from_cart(172, $booksInCart); 

/* Result 
Array 
(
    [0] => Array 
     (
      [bookId] => 344 
      [quantity] => 1 
     ) 

    [1] => Array 
     (
      [bookId] => 54 
      [quantity] => 1 
     ) 

    [3] => Array 
     (
      [bookId] => 3 
      [quantity] => 1 
     ) 

) 

*/ 
print_r($booksInCart); 
?> 

Тот же метод может быть использован для обновления количества-х книги:

//User function to rebuild the array updating the qty you want changed 
function update_book_in_cart($bookID, $qty, $haystack){ 
    $ret = array(); 
    foreach($haystack as $key=>$item){ 
     if($item['bookId'] == $bookID) $item['quantity'] = $qty; 
     $ret[$key]=$item; 
    } 
    return $ret; 
} 

и т. д.

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