2016-04-25 24 views
0

かなりのデータで終わる配列を作成します。この配列の例はそうです。配列内のデータへのアクセス

array:9 [▼ 
    0 => array:9 [▼ 
    "ID" => "1232806" 
    "Date" => "21/04/2016" 
    "Name" => "Test" 
    "Owner" => "Someone" 
    "Value" => "2160.00" 
    "Status/Stage" => "70%" 
    0 => array:2 [▼ 
     "Structure" => "" 
     "Prospect" => "No" 
    ] 
    1 => array:2 [▼ 
     0 => array:8 [▼ 
     "Quote ID" => "Q0020" 
     "Name" => "Test" 
     "Amount" => "2160" 
     ] 
     1 => array:2 [▼ 
     0 => array:1 [▼ 
      "Type" => "New" 
     ] 
     1 => array:1 [▼ 
      "Month" => "June 16" 
     ] 
     ] 
    ] 
    ] 
] 

これで、この配列からデータを取得しようとしています。問題なしでトップレベルのアイテムを手に入れることができます。

foreach ($array as $data) { 
    echo $data["ID"]; 
    echo $data["Date"]; 
    echo $data["Name"]; 
    ... 
} 

しかし、私は内側のデータに苦しんでいます。私は何かをしようとしています

foreach ($array as $data) { 
    echo $data["ID"]; 
    echo $data["Date"]; 
    echo $data["Name"]; 
    foreach ($data as $innerData) { 
     echo innerData["Structure"]; 
     echo innerData["Prospect"]; 
    } 
} 

私はこれを行うと、不正な文字列のオフセットについて文句を言います。 この配列内のすべての異なるデータにアクセスするにはどうすればよいですか?

おかげで私は今、あなたは同じようにアクセスすることができ、この間違ったhttps://stackoverflow.com/questions/36837239/processing-xml-data-into-array

+0

「ステータス/ステージ」の下にあるのは何ですか? – aldrin27

+0

誤った '$ innerData'が誤って入力されたバグやコードバグ? – apokryfos

答えて

1
You need to assign inner array in another new index like: 
I have created innnerdata index. 

array:9 [▼ 
    0 => array:9 [▼ 
    "ID" => "1232806" 
    "Date" => "21/04/2016" 
    "Name" => "Test" 
    "Owner" => "Someone" 
    "Value" => "2160.00" 
    "Status/Stage" => "70%" 
    "innnerdata" => array:2 [ 
    0 => array:2 [ 
     "Structure" => "" 
     "Prospect" => "No" 
    ] 
    1 => array:2 [ 
     0 => array:8 [ 
     "Quote ID" => "Q0020" 
     "Name" => "Test" 
     "Amount" => "2160" 
     ] 
     1 => array:2 [ 
     0 => array:1 [ 
      "Type" => "New" 
     ] 
     1 => array:1 [ 
      "Month" => "June 16" 
     ] 
     ] 
    ] 
    ] 

    ] 
] 

をやっている可能性があるので、私はデータを収集する方法を示す質問に作成

:あなたがそうでなければ

foreach ($array as $data) { 
    echo $data["ID"]; 
    echo $data["Date"]; 
    echo $data["Name"]; 
    foreach ($data['innerdata'] as $innerData) { 
     echo innerData["Structure"]; 
     echo innerData["Prospect"]; 
    } 
} 

を$ data [0] ["Structure"]、$ data [1] ["Structure"]などのようにアクセスする必要があります。

1
流れ下記のとおりお試しください

foreach ($array as $k=>$data) { 
     echo $data["ID"]; 
     echo $data["Date"]; 
     echo $data["Name"]; 
    if(is_numeric($k) && is_array($data)) 
    { 

     foreach ($data as $innerData) { 
     echo innerData["Structure"]; 
     echo innerData["Prospect"]; 
     } 
    } 
} 

}

1

あなたの例から$データの後に、配列エントリ[「名前」]はあなたが回避することができ、アレイが、文字列

"Owner" => "Someone" 

ではありませんこの種の問題は、配列の値をテストして配列であるかどうかを調べ、配列キーが存在するかどうかをチェックすることによって行われます。

if (is_array($innerData)) { 
    foreach ($data as $innerData) { 
     if (isset($innerData['structure'])) { 
      echo $innerData["Structure"]; 
     } 
     // This also works 
     if (array_key_exists('Prospect', $innerdData)) { 
      echo $innerData["Prospect"]; 
     } 
    } 
} 
関連する問題