我从webservice接收下面的json有效负载,我试图在解码whlist后使用循环将它分成3个不同的数组,保持相同的数组键:
.babelrc.js
对于" way_points"中的值key我想在解码后想出一个名为waypoint的数组,同时忽略其中的customers数组。我也想改变" id" #34; waypoint_id"的关键名称在这个过程中。
对于"客户"中的值key(在主数组中)我想要一个名为" waypoint"的数组。解码后,同时分配" url" "上传的个人资料图片的关键"键。我也想改变" id"密钥名称为" customer_id"在这个过程中。
上面提到的数组之外的任何元素(因此主数组中未分配给数组的元素),我希望它们形成一个名为" orders"的数组。
我该怎么做呢?我是LOOPS的新人
答案 0 :(得分:2)
首先,您需要将json编码的字符串解码为可用格式,array
或对象。您可以找到json_decode
here的所有可能选项。
$inputArray = json_decode($inputString, true);
现在循环。为了简单起见,您可以将您需要的三个数组初始化为空数组。然后,在循环中,只需检查键值并选择要将数据附加到的数组。
$waypoints = array();
$customers = array();
$orders = array();
$count = 0;
foreach($inputArray as $key => $element) {
/* using if statements */
if($key === 'way_points') {
$waypoints[] = $element;
}
elseif($key === 'customer') {
$customers[] = $element;
}
else {
$orders[$count][$key] = $element;
}
/* using a switch/case */
switch($key) {
case 'way_points':
$waypoints[] = $element;
break;
case 'customer':
$customers[] = $element;
break;
default:
$orders[$count][$key] = $element;
break;
}
$count++;
}
此时您应该拥有所需的所有数据,但我们仍然无法更改密钥。您可以保持原样,毕竟id
$waypoints
中的waypoint_id
代表$waypoints
是非常不言自明的。但是,如果您确实需要更改密钥,可以通过以下几种方法来完成此操作。您可以遍历新形成的$waypoints = change_keys($waypoints);
function change_keys($arr) {
return array_map(function($waypoint) {
return array(
'waypoint_id' => $waypoint['id'],
'lat' => $element['lat'],
/* remaining fields */
);
}, $arr);
}
数组并修改此新循环中的键。
foreach
或者您可以减少步数并在初始$waypoints = array();
$customers = array();
$orders = array();
$count = 0;
foreach($inputArray as $key => $element) {
if($key === 'way_points') {
$waypoints[] = array_map(function($element) {
return array(
'waypoint_id' => $element['id'],
'lat' => $element['lat'],
/* remaining fields */
);
}, $arr);
}
/* ... */
}
循环
array_map
您可以在json_decode
here找到更多信息。
顺便说一句,正如@jeroen在评论中提到的那样,你可以简单地使用foreach($myArray[waypoints] as $key => $waypoint)
,并且你将留下一个可用的关联数组。例如,要遍历路标,您只需编写{{1}}。