如何在PHP中从多维JSON字符串数组中获取元素的值

如何在PHP中从多维JSON字符串数组中获取元素的值,php,arrays,json,multidimensional-array,Php,Arrays,Json,Multidimensional Array,这是阵列: Array ( [0] => Array ( [product_details] => {"5f93f983524def3dca464469d2cf9f3e":{"id":"110","qty":1,"option":"{\"color\":{\"title\":\"Color\",\"value\":null}}","price":1400,"name":"Foot Massage","tax":null,"image":"http:\/\/ac

这是阵列:

Array
(
[0] => Array

   (
        [product_details] => {"5f93f983524def3dca464469d2cf9f3e":{"id":"110","qty":1,"option":"{\"color\":{\"title\":\"Color\",\"value\":null}}","price":1400,"name":"Foot Massage","tax":null,"image":"http:\/\/acme.dev\/uploads\/product_image\/product_110_1_thumb.jpg","coupon":"9","book_date_":"2017-04-19","book_date_name_":"wed","start_timeslot_":"09:00:00","end_timeslot_":"10:00:00","has_already_rescheduled":0,"discount_":"0","rowid":"5f93f983524def3dca464469d2cf9f3e","subtotal":1400}}
    )

[1] => Array
    (
        [product_details] => {"2723d092b63885e0d7c260cc007e8b9d":{"id":"109","qty":1,"option":"{\"color\":{\"title\":\"Color\",\"value\":null}}","price":700,"name":"Body Massage","tax":0,"image":"http:\/\/acme.dev\/uploads\/product_image\/product_109_1_thumb.jpg","coupon":"","book_date_":"2017-04-18","book_date_name_":"tue","start_timeslot_":"09:00:00","end_timeslot_":"10:00:00","has_already_rescheduled":0,"discount_":"0","rowid":"2723d092b63885e0d7c260cc007e8b9d","subtotal":700}}
    )

[2] => Array
    (
        [product_details] => {"a3c65c2974270fd093ee8a9bf8ae7d0b":{"id":"108","qty":1,"option":"{\"color\":{\"title\":\"Color\",\"value\":null}}","price":3000,"name":"Alo","tax":0,"image":"http:\/\/acme.dev\/uploads\/product_image\/default.jpg","coupon":"","book_date_":"2017-04-21","book_date_name_":"fri","start_timeslot_":"10:00:00","end_timeslot_":"12:00:00","has_already_rescheduled":0,"discount_":"0","rowid":"a3c65c2974270fd093ee8a9bf8ae7d0b","subtotal":3000}}
    )

[3] => Array
    (
        [product_details] => {"a3c65c2974270fd093ee8a9bf8ae7d0b":{"id":"108","qty":1,"option":"{\"color\":{\"title\":\"Color\",\"value\":null}}","price":3000,"name":"Alo","tax":0,"image":"http:\/\/acme.dev\/uploads\/product_image\/default.jpg","coupon":"","book_date_":"2017-04-12","book_date_name_":"wed","start_timeslot_":"08:00:00","end_timeslot_":"10:00:00","has_already_rescheduled":0,"discount_":"0","rowid":"a3c65c2974270fd093ee8a9bf8ae7d0b","subtotal":3000}}
    )

)

我需要的是创建一个新的简单数组,其中包含来自所有“id”元素的值

您的“产品详细信息”似乎是一个JSON字符串。循环遍历数组,解码JSON并将“id”存储在新数组中。

您的“产品详细信息”似乎是一个JSON字符串。在数组中循环,解码JSON并将“id”存储在新数组中。

您可以使用数组映射和数组值来实现这一点

下面是一个快速示例,您需要修改它以适合您的需要:

$ar = [
    0 => ['product_details' => '{"5f93f983524def3dca464469d2cf9f3e":{"id": 3}}'],
    1 => ['product_details' => '{"2723d092b63885e0d7c260cc007e8b9d":{"id": 8}}'],
    2 => ['product_details' => '{"a3c65c2974270fd093ee8a9bf8ae7d0b":{"id": 5}}'],
    3 => ['product_details' => '{"a3c65c2974270fd093ee8a9bf8ae7d0b":{"id": 1}}'],
];

$ar = array_map(function ($value) {
    return array_values(json_decode($value['product_details'], true))[0]['id'];
}, $ar);

print_r($ar);

现场演示:

您可以使用数组映射和数组值来实现这一点

下面是一个快速示例,您需要修改它以适合您的需要:

$ar = [
    0 => ['product_details' => '{"5f93f983524def3dca464469d2cf9f3e":{"id": 3}}'],
    1 => ['product_details' => '{"2723d092b63885e0d7c260cc007e8b9d":{"id": 8}}'],
    2 => ['product_details' => '{"a3c65c2974270fd093ee8a9bf8ae7d0b":{"id": 5}}'],
    3 => ['product_details' => '{"a3c65c2974270fd093ee8a9bf8ae7d0b":{"id": 1}}'],
];

$ar = array_map(function ($value) {
    return array_values(json_decode($value['product_details'], true))[0]['id'];
}, $ar);

print_r($ar);

现场演示:

希望这个简单的
foreach
能对您有所帮助

解决方案1:

这里我们使用
array\u列
提取
product\u详细信息
,然后使用
array\u映射
迭代
$personalDetails
,其中包含所有
JSON
,然后我们使用
函数返回数组的第一个键,并通过该键访问,它的
id

解决方案2:


希望这个简单的
foreach
对您有所帮助

解决方案1:

这里我们使用
array\u列
提取
product\u详细信息
,然后使用
array\u映射
迭代
$personalDetails
,其中包含所有
JSON
,然后我们使用
函数返回数组的第一个键,并通过该键访问,它的
id

解决方案2:


使用
array\u列和json\u解码

    $new_one = array_column($array,'product_details');
    $new_array=[];
    foreach($new_one as $key=>$row)
    {    
     foreach(json_decode($row,true) as $key1=>$row1)
     {
         $new_array[]=$row1['id'];
     }

    }

    print_r($new_array);

使用
array\u列和json\u解码

    $new_one = array_column($array,'product_details');
    $new_array=[];
    foreach($new_one as $key=>$row)
    {    
     foreach(json_decode($row,true) as $key1=>$row1)
     {
         $new_array[]=$row1['id'];
     }

    }

    print_r($new_array);
请尝试此代码,

print_r(array_column(array_map(function($v){return current(json_decode($v));},array_column($array, 'product_details')), 'id'));
请尝试此代码,

print_r(array_column(array_map(function($v){return current(json_decode($v));},array_column($array, 'product_details')), 'id'));

不是免费的代码编写服务。您应该尝试自己编写代码。之后,如果你有问题,你可以张贴你已经尝试了一个明确的解释什么是不工作,并提供一个解决方案。我建议读一个好问题。这些不是序列化数组。我在那里有点发疯了。@Daniel请检查我的不是免费的代码编写服务。您应该尝试自己编写代码。之后,如果你有问题,你可以张贴你已经尝试了一个明确的解释什么是不工作,并提供一个解决方案。我建议读一个好问题。这些不是序列化数组。我在那里有点发疯了。@Daniel请检查我是否同意Tom上面的评论。这是一个可能的解决方案的解释。实现代码应该没那么难。同意Tom上面的评论。这是一个可能的解决方案的解释。实现代码应该没有那么难。数组映射比foreach快吗?或者它真的不重要。
foreach
是快速的,您不需要在这里使用
array\u column
json\u解码($value['product\u details',true)会起作用:)数组映射比foreach快吗?或者它真的不重要。
foreach
是快速的,您不需要在这里使用
array\u column
json\u解码($value['product\u details',true)会成功的:)嗨,兄弟,这是我的错。我没有注意到内部是一个json字符串。我编辑我的,检查一下。嗨,兄弟,这是我的错。我没有注意到内部是一个json字符串。我编辑我的,检查它。