如何在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字符串。我编辑我的,检查它。