解码多维Json数组并将其分成3个不同的数组

时间:2017-10-02 15:33:07

标签: php arrays json multidimensional-array

我从webservice接收下面的json有效负载,我试图在解码whlist后使用循环将它分成3个不同的数组,保持相同的数组键:

.babelrc.js

对于" way_points"中的值key我想在解码后想出一个名为waypoint的数组,同时忽略其中的customers数组。我也想改变" id" #34; waypoint_id"的关键名称在这个过程中。

对于"客户"中的值key(在主数组中)我想要一个名为" waypoint"的数组。解码后,同时分配" url"  "上传的个人资料图片的关键"键。我也想改变" id"密钥名称为" customer_id"在这个过程中。

上面提到的数组之外的任何元素(因此主数组中未分配给数组的元素),我希望它们形成一个名为" orders"的数组。

我该怎么做呢?我是LOOPS的新人

1 个答案:

答案 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}}。