0

私はこの変数を持っています:

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

そして、配列メソッドでトップ変数から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番目の方法を使用したくありません

アップデート:

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この情報を使用して、getparent_idおよび ... のより良い方法は何ですか?

4

6 に答える 6

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

は PHP 配列ではありません。これを分解して配列に変換し、見つけた余分な を削除する必要が"=>"あり","ます"

json_encodeただし、JSON を使用し、およびを使用する必要があります。json_decode

于 2013-09-30T20:30:15.137 に答える
1

結果として連想配列を取得するにはjson_decode()、2 番目のパラメーターと一緒に使用します。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";
    // ...
}

デモ!

于 2013-09-30T20:59:13.973 に答える
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 () を使用します。出来た。

于 2013-09-30T20:38:37.980 に答える
1

動的なものが必要な場合は、JSON エンコーディングを使用し、json_decode メソッドを使用する必要があります。JSON は、動的データの優れた標準です。

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

于 2013-09-30T20:29:27.840 に答える
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 )
于 2013-09-30T20:52:01.273 に答える
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 );
于 2013-09-30T20:38:59.030 に答える