我有一个数组:
[
{"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"}
我该怎么做?
答案 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"}}