我正在尝试编写一个循环,该循环将列出JSON数据中的所有uid
。 uid
分为两类(衬衫和裤子)。以下是到目前为止的内容。任何帮助是极大的赞赏。
当前代码和JSON
$url = 'http://foothillertech.com/student/webdesign/2018/2018benrud2/projects/retail/data2.json';
$jsonData = file_get_contents($url);
$data = json_decode($jsonData, true);
我可以通过uid
手动获得每个$data['shirts'][0]['uid']
,但是我正在寻找一种遍历数据的方法,以返回衬衫和裤子类别中的所有uid。
谢谢!
这是解决我问题的代码。
谢谢@不要惊慌!
foreach ($data as $item_type => $items) {
foreach ($items as $item) {
$uids[] = $item['uid'];
echo $uids[$i]."<br>";
$i++;
}
}
答案 0 :(得分:3)
您可以合并第二级数组(衬衫和裤子的按键),并从结果中获取uid列。
$uids = array_column(array_merge(...array_values($data)), 'uid');
此表达式的详细信息由内而外(PREVIOUS表示上一步的结果):
array_values($data)
将外部数组的字符串键(“衬衫”,“裤子”)转换为数字array_merge(... PREVIOUS )
合并两个内部数组,并使用argument unpacking将它们传递到array_merge
。 (需要进行上一步array_values
,因为参数解压缩将不适用于带有字符串键的数组。)array_column( PREVIOUS , 'uid')
从前面步骤生成的合并数组中获取所有'uid'值尽管如此,这是一种花哨的方式来做一些相当简单的事情。如果仅使用嵌套循环,则代码将更加清晰。
foreach ($data as $item_type => $items) {
foreach ($items as $item) {
$uids[] = $item['uid'];
}
}
答案 1 :(得分:0)
就像@ jon-stirling提到的那样,您可以使用array_column()
从数组的符号列中提取值。它做的许多其他事情超出了您的问题范围。在http://php.net/manual/en/function.array-column.php
专门针对您的示例,以下代码应为您提供从uid
中提取的所有$data['shirts']
。
$url = 'http://foothillertech.com/student/webdesign/2018/2018benrud2/projects/retail/data2.json';
$jsonData = file_get_contents($url);
$data = json_decode($jsonData, true);
$shirtsUids = array_column($data['shirts'], 'uid');
$pantsUids = array_column($data['pants'], 'uid');
// Then you can use $shirtsUids and $pantsUids as you see fit.
请确保$ data数组中有一个名为Shirt的密钥,否则将引发错误或警告。
为避免引起错误,我使用Null合并运算符(??
)将不确定值默认设置为可接受的值。因此,我将使用$data['shirts'] ?? []
。但同样,请确保$ data ['shirts']是一个数组。
$url = 'http://foothillertech.com/student/webdesign/2018/2018benrud2/projects/retail/data2.json';
$jsonData = file_get_contents($url);
$data = json_decode($jsonData, true);
$shirtsUids = array_column($data['shirts'] ?? [], 'uid');
$pantsUids = array_column($data['pants'] ?? [], 'uid');
// Then you can use $shirtsUids and $pantsUids as you see fit.