我有这个变量:
$value = '"item_id"=>"null","parent_id"=>"none","depth"=>0,"left"=>"1","right"=>18';
我希望从使用Array方法的top变量获取item_id和其他元素,所以我写这个:
$value_arr = array($value);
$item_id = $value_arr["item_id"];
但我收到错误Notice: Undefined index: item_id in file.php on line 115
但是当我使用这种方法时,我成功地获得了良好的结果:
$value_arr = array("item_id"=>"null","parent_id"=>"none","depth"=>0,"left"=>"1","right"=>18);
$item_id = $value_arr["item_id"];
我如何解决这个问题?
注意:我不想使用2'nd方法因为我的变量是动态的
Vincent回答我必须使用json_decode,我想问另一个问题更好的方法,因为我的原始字符串是:
[
{"item_id":null,"parent_id":"none","depth":0,"left":"1","right":18},
{"item_id":"1","parent_id":null,"depth":1,"left":2,"right":7},
{"item_id":"3","parent_id":null,"depth":1,"left":2,"right":7}
]
有了这些信息,有什么方法可以获得item_id
,parent_id
和...?
答案 0 :(得分:3)
$value = '"item_id"=>"null","parent_id"=>"none","depth"=>0,"left"=>"1","right"=>18';
不是PHP数组,您需要通过在"=>"
和","
上展开它来将其转换为数组,并删除您找到的任何额外的"
。
您应该使用JSON并使用json_encode
和json_decode
答案 1 :(得分:1)
如果你想要动态的东西,你应该使用JSON编码并使用json_decode方法。 JSON是动态数据的一个很好的标准。
答案 2 :(得分:1)
我为你测试了这个:
<?php
$value = '"item_id"=>"null","parent_id"=>"none","depth"=>0,"left"=>"1","right"=>18';
eval("\$value_arr = array($value);");
print_r($value_arr);
?>
请检查。使用PHP :: eval ()。它奏效了。
答案 3 :(得分:1)
将json_decode()
与第二个参数TRUE
一起使用,以获得关联数组作为结果:
$json = json_decode($str, TRUE);
for ($i=0; $i < count($json); $i++) {
$item_id[$i] = $json[$i]['item_id'];
$parent_id[$i] = $json[$i]['parent_id'];
// ...
}
如果您想使用foreach
循环:
foreach ($json as $key => $value) {
echo $value['item_id']."\n";
echo $value['parent_id']."\n";
// ...
}
答案 4 :(得分:0)
快速而肮脏的解决方案可能是:
$array = json_decode( '{' . str_ireplace( '=>', ':', $value ) . '}', true );
// Array ( [item_id] => null [parent_id] => none [depth] => 0 [left] => 1 [right] => 18 )
编辑:关于问题的更新。
您的输入是json_encoded数组。只需json_decode就可以了。
json_decode( $value, true );
答案 5 :(得分:0)
这可以是您正在寻找的解决方案:
<?php
$value = '"item_id"=>"null","parent_id"=>"none","depth"=>0,"left"=>"1","right"=>18';
$arr = explode(',',$value);
foreach($arr as $val)
{
$tmp = explode("=>",$val);
$array[$tmp[0]] = $tmp[1];
}
print_r($array);
?>
这将输出如下内容:
Array ( ["item_id"] => "null" ["parent_id"] => "none" ["depth"] => 0 ["left"] => "1" ["right"] => 18 )