我有一个类似下面给出的JSON字符串,它存储在$json
中。我想在不使用循环的情况下访问第一个category_id
。我该如何访问它?
$json = '{"outfits": [{"1": [{"category_id": "women_jeans", "product_id": 464540467}, {"category_id": "women_tops", "product_id": 487351815}, {"category_id": "women_coats", "product_id": 493322686}, {"category_id": "women_bags", "product_id": 483902882}, {"category_id": "women_shoes", "product_id": 492772225}]}]}';
$outfits = json_decode($json);
答案 0 :(得分:5)
尝试以下代码。
$json = '{"outfits": [{"1": [{"category_id": "women_jeans", "product_id": 464540467}, {"category_id": "women_tops", "product_id": 487351815}, {"category_id": "women_coats", "product_id": 493322686}, {"category_id": "women_bags", "product_id": 483902882}, {"category_id": "women_shoes", "product_id": 492772225}]}]}';
$outfits = json_decode($json,true);
echo "Category 1: ".$outfits["outfits"][0][1][0]['category_id'];
echo "Category 2: ".$outfits["outfits"][0][1][1]['category_id'];
<强>输出强>
women_jeans
women_tops
您也可以使用以下功能查找特定值。
$array = $outfits["outfits"][0][1];
$key = "product_id";
$val = "464540467";
function whatever($array, $key, $val) {
foreach ($array as $item)
if (isset($item[$key]) && $item[$key] == $val)
echo $item['category_id'];
return false;
}
whatever($array,$key,$val);
<强>输出强>
women_jeans
如果你想获得没有循环的category_id和true
,请使用下面的内容。
$array = $outfits->outfits[0]->{1};
$category1 = $array[0]->category_id;
答案 1 :(得分:2)
$json = '{"outfits": [{"1": [{"category_id": "women_jeans", "product_id": 464540467}, {"category_id": "women_tops", "product_id": 487351815}, {"category_id": "women_coats", "product_id": 493322686}, {"category_id": "women_bags", "product_id": 483902882}, {"category_id": "women_shoes", "product_id": 492772225}]}]}';
$outfits = json_decode($json,true);
答案 2 :(得分:0)
例如
<?php
$json = '{"outfits": [{"1": [{"category_id": "women_jeans", "product_id": 464540467}, {"category_id": "women_tops", "product_id": 487351815}, {"category_id": "women_coats", "product_id": 493322686}, {"category_id": "women_bags", "product_id": 483902882}, {"category_id": "women_shoes", "product_id": 492772225}]}]}';
$outfits = json_decode($json, true);
$arr = $outfits["outfits"][0][1];
直接访问值:
echo $arr[0]['category_id'].", ".$arr[1]['category_id'];
function walk($v, $k) {
echo "$k : ".$v['category_id']."<br/>";
}
如果您不想要自己的循环,可以使用 array_walk :
array_walk($arr, "walk");
?>
答案 3 :(得分:0)
$json= '{"outfits": [{"1": [{"category_id": "women_jeans", "product_id": 464540467}, {"category_id": "women_tops", "product_id": 487351815}, {"category_id": "women_coats", "product_id": 493322686}, {"category_id": "women_bags", "product_id": 483902882}, {"category_id": "women_shoes", "product_id": 492772225}]}]}';
//convert json to associative array.
$json_array = json_decode($json,true);
// Return the values from a single column in the input array
$newArray= array_column($json_array["outfits"][0][1],"category_id");
<强>输出强>
Array
(
[0] => women_jeans
[1] => women_tops
[2] => women_coats
[3] => women_bags
[4] => women_shoes
)
注意:array_column仅适用于 5.5 +
答案 4 :(得分:0)
OP的要求我想在没有循环的情况下访问它。这不是 正确的原因你有多个
category_id
,所以问题是 你需要哪一个。所以你需要循环。
通过使用json_decode
,您将拥有一个对象数组,因此您需要执行这些操作。让$json
是你的字符串。通过在foreach循环中使用$outfits->outfits[0]->{1}
,只需得到结果数组的最后一个维度,这样就可以轻松访问category_id
。
$outfits = json_decode($json);
foreach($outfits->outfits[0]->{1} as $val){
echo $val->category_id."<br/>";
}
<强>结果:强>
women_jeans
women_tops
women_coats
women_bags
women_shoes