2014-07-11 76 views
1

我有相同的子阵列的大阵,一个小例子可能看起来像:删除子数组,如果条件(两个键和值)满足

array(4) { 
    [0]=> 
    array(2) { 
    ["id_product"]=> 
    string(4) "1372" 
    ["quantity"]=> 
    int(0) 
    } 
    [1]=> 
    array(2) { 
    ["id_product"]=> 
    string(4) "1373" 
    ["quantity"]=> 
    int(1) 
    } 
    [2]=> 
    array(2) { 
    ["id_product"]=> 
    string(4) "1374" 
    ["quantity"]=> 
    int(2) 
    } 
    [3]=> 
    array(2) { 
    ["id_product"]=> 
    string(4) "1375" 
    ["quantity"]=> 
    int(0) 
    } 
} 

我的目标是创建一个新的数组,不包括子阵列,quantity等于int(0),什么可能看到这样的信息:

array(4) { 
    [1]=> 
    array(2) { 
    ["id_product"]=> 
    string(4) "1373" 
    ["quantity"]=> 
    int(1) 
    } 
    [2]=> 
    array(2) { 
    ["id_product"]=> 
    string(4) "1374" 
    ["quantity"]=> 
    int(2) 
    } 
} 

我使用array_search()unset()尝试,但都无济于事。有关如何使用这些函数的任何建议,以便我可以排除具有如下条件的任何子数组:sub-key = x和value = y。

非常感谢您的帮助。

回答

1

知府情况下使用array_filter()

$newArray = array_filter(
    $originalArray, 
    function($value) { 
     return $value['quantity'] > 0; 
    } 
); 
+1

请downvoter告诉我们为什么? –

+0

这个问题需要根据条件过滤出数组中的元素,并创建一个新过滤的数组。使用array_filter()的最佳案例 – Alex

+0

这对我来说非常合适,它解决了像魅力这样的问题。我认为应该把一些upvotes放在这里而不是downvoting,因为使用'unset'和'array_search'是浪费时间(对我来说)。 –

1

试试你的自定义代码

function array_filter(){ 
    $newArray = array(); 
    foreach($array as $key => $value){ 
     if($value["quantity"] > 0) 
      $newArray[] = $value 
    } 
    return $newArray; 
} 

享受:)

+0

谢谢你,先生+1。 –

+0

欢迎你:) – Anri