如果值匹配,则从数组中删除记录

时间:2016-04-12 12:38:41

标签: php arrays magento

我有一个数组:

[
{"sku":"5221","qty":1,"price":17.5,"desc":"5395 - Replenish Natural Hydrating Lotion 3.5oz"},
{"sku":"11004","qty":1,"price":30.95,"desc":"150 - Q-Plus 16oz"}}

现在我想通过匹配sku来删除第一行,比如sku == 5221,而不是删除整个记录行:

{"sku":"5221","qty":1,"price":17.5,"desc":"5395 - Replenish Natural Hydrating Lotion 3.5oz"}

我该怎么做?

3 个答案:

答案 0 :(得分:1)

使用json_decode()简单地将JSON STRING转换为PHP数据类型在这种情况下,数据类型将是一个对象数组,因为json包含在[]中,对象由{{1}表示}

然后处理生成的数组,查找要删除的密钥和{}该阵列出现的位置。

UNSET

答案 1 :(得分:0)

PHP有一个方便的array_filter方法,可以很容易地解决这个问题。基本上,您要尝试做的是:如果当前数组与我要删除的数组不匹配,请返回TRUE包含它:

$badSku = "5221";

$myNewArray = array_filter($myArray, function($currObject){
  return $currObject["sku"] != $badSku;
});

您也可以使用传统循环手动执行此操作。只需确保从最后开始以避免指针问题:

$badSku = "5221";

for($i = count($myArray); $i > 0; $i--) {
  if($myArray[$i]["sku"] == $badSku) {
    array_splice($myArray, $i, 1);

    // If you know there is only a single match, you can break here for optimal efficiency
    break;
  }
}

答案 2 :(得分:0)

使用unset()函数从数组中删除记录...

<?php
$string = '[{"sku":"5221","qty":1,"price":17.5,"desc":"5395 - Replenish Natural Hydrating Lotion 3.5oz"},{"sku":"11004","qty":1,"price":30.95,"desc":"150 - Q-Plus 16oz"}]';
$array = json_decode($string, true);
foreach($array as $key => $val)
{
    if($val['sku']=='5221')
    {
        unset($array[$key]);
    }
}
echo "<pre>"; print_r($array);
echo json_encode($array);
?>

这将输出:

关联数组如下所示:

Array
(
    [1] => Array
        (
            [sku] => 11004
            [qty] => 1
            [price] => 30.95
            [desc] => 150 - Q-Plus 16oz
        )

)

JSON数组将如下所示并删除记录sku = 5221

{"1":{"sku":"11004","qty":1,"price":30.95,"desc":"150 - Q-Plus 16oz"}}