在php中将变量转换为数组

时间:2013-09-30 20:27:18

标签: php arrays variables

我有这个变量:

$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_idparent_id和...?

6 个答案:

答案 0 :(得分:3)

$value = '"item_id"=>"null","parent_id"=>"none","depth"=>0,"left"=>"1","right"=>18';

不是PHP数组,您需要通过在"=>"","上展开它来将其转换为数组,并删除您找到的任何额外的"

您应该使用JSON并使用json_encodejson_decode

答案 1 :(得分:1)

如果你想要动态的东西,你应该使用JSON编码并使用json_decode方法。 JSON是动态数据的一个很好的标准。

http://php.net/manual/en/function.json-decode.php

答案 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";
    // ...
}

Demo!

答案 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 )