2011-10-29 7 views
3

以下の質問。マルチレベルアレイからのデータの取得

これはPixelerの答えに基づいて思いついた解決策です。

<?php 
$i = 0; 
foreach ($array as $k1 => $v1) { 
     if (is_array($v1)) { 
      echo $k1."<br />"; 
       foreach ($v1 as $k2 => $v2) { 
        echo "--".$k2."<br />----".$v2."<br />"; 
       } 
      $i++; 
     } 
     echo "<br /<br />"; 
} 
?> 

<?php 
$array = array("Apples" => array("Red" => "$2.95", "Green" => "$2.45"), 
       "Oranges" => array("Navel" => "$4.95"), 
       "Grapes" => array("Purple" => "$3.75", "Green" => "$3.25") 
      ); 
?> 

それは上記の何取ると番号を呼び出すことによって、それぞれの値のテキストを取得することはできますか? ?アイデアは私が最初のレベル(りんご、オレンジ、ブドウ)、セカンドレベル(赤、緑、へそを返すことができるということです。私は...

<?php 
echo $array[0]; 
//Outputs "Apples" 

echo $array[0][0]; 
//Outputs "Red" 

echo $array[0][0][0]; 
//Outputs "$2.95" 

echo $array[3][2][1]; 
//Outputs "$3.25" (Grapes > Green > Price) 
?> 

EDITこのような何かを行うことができますどのように パープル、グリーン)、第3レベル($ 2.95、$ 2.45、$ 4.95、$ 3.75、$ 3.25)

は例えば、私はこのような何かをしたい:

<?php 

count($array); //returns 3 (Apples, Oranges, Grapes) 

//Do some for/foreach function that will produce the following: 

//Apples 
//->Red: $2.95 
//->Green: $2.45 
//Oranges 
//->Navel: $4.95 
//Grapes 
//Purple: $3.75 
//Green: $3.25 

//I'm hoping to structure the code like this: 

foreach($i = 0; $i =< count($array); $i++){ 
    //echo title of array (Apples) 
    //echo each child key and it's value (Red: $2.95; Green: $2.45) 

    foreach($secondcounter = 0; $secondcounter =< count($array[$i]); $secondcounter++){ 
     echo array_key($array[$i][$secondcounter]) . ": " .$array[$i][$secondcounter]; 
     //Note: I don't actually know if array_key does the trick or not, it's meant to return "Red" in this case, while the non array_key()'d is meant to return the price of red apples, $2.95 
} 

?> 

EDIT:それは私がデータを呼び出すために言葉を使うことができないことに注意することが重要です。私のデータベースからロードするデータの行に応じてAppleが変わる可能性があるので、配列の最初の項目を呼び出すには数字[0]を使用する必要があります。言い換えれば...リンゴは実際に本であることが判明し、赤は本の名前=>価格になる可能性があります。

私はこれらの機能にあまり慣れていませんが、serialize/unserializeを使用してデータベースからデータを保存したり取得したりするつもりですが、簡単に見ていて使い方は簡単です。


私は何時間も研究してきましたが、何も見つかりませんでした。 私はテキストではなく数字でデータを呼び出すことが不可欠です。したがって、$ array ["Apples"]は受け入れられません。

私もjson_decodeを見てシリアライズ/シリアライズしました。私は簡単な見解からそれらの基本的な考えを得ていると思います...しかし私の主な問題は、上記のデータを私の例。どんな助けも本当に素晴らしいでしょう。

+0

数値配列のように配列を使いたいのですが、どのような例であるかを知りたければ、 'Grapes - > Purle'ですか?このような配列をデータベースに保存したい場合は、 'serialize'と' unserialize'を使うことをお勧めします。 – Revenant

+0

ええ、私はそうだと思います。私は "Apples"、 "Red"、 "$ 2.95"という言葉をすべて返すことができればいいと思う。しかし、私は数字だけを使ってこれらの値をすべて返すことができるようにしたい。 –

+0

あなたは何をしたいのか考え直さなければならないでしょう。関連する配列と数値配列でmysqlからデータを取得するほうが簡単ではないでしょう。あなたはそれらの両方を持っていて、あなたが望むものを何でもすることができます。他の方法では、複数の配列を作成し、それらを比較し、インデックス番号などを見つけようとするなどしなければなりません。 – Revenant

答えて

0

この場合はどうなりますか?

array_search("Apples",array_keys($array)); 

あなたがループに使用するアレイ一つの方法または別のをしたい場合は、あなたの古い配列を通じて新しい配列、ループを作成し、新しい数値配列の配列を作成する必要があるかもしれませんか?

FIRST WAY


$array = array("Apples" => array("Red" => "$2.95", "Green" => "$2.45"), 
       "Oranges" => array("Navel" => "$4.95"), 
       "Grapes" => array("Purple" => "$3.75", "Green" => "$3.25") 
      ); 

$newArray = array(); 
foreach ($array as $value) { 
    $newArray[] = (is_array($value)) ? array_values($value) : $value; 
} 

echo '<pre>'; 
var_dump($newArray); 
echo '</pre>'; 

SECOND WAY


$array = array("Apples" => array("Red" => "$2.95", "Green" => "$2.45"), 
       "Oranges" => array("Navel" => "$4.95"), 
       "Grapes" => array("Purple" => "$3.75", "Green" => "$3.25") 
      ); 

$newArray = array(); 
$i = 0; 
foreach ($array as $key => $value) { 
if (is_array($value)) { 
    $newArray[$i] = array(); 
    foreach ($value as $k => $v) { 
    $newArray[$i][] = $v; 
    } 
    $i++; 
} 
} 

echo '<pre>'; 
var_dump($newArray); 
echo '</pre>'; 

echo $newArray[0][0]; 

もちろん、私は、最初の方法をお勧めします。

+0

これは完璧ですが、Appleはいくつかの異なるものに変わる可能性があります。これが私がそれを番号で呼び出す必要がある理由です。 –

+0

明確にするために質問を更新しています。ごめんなさい。 –

+0

お待ちください。あなたのアップデートをお読みしています。私はそれをテストするつもりです:) –

1

これは、@ Pixelerの答えに基づいて思いついた解決策です。

<?php 
$i = 0; 
foreach ($array as $k1 => $v1) { 
     if (is_array($v1)) { 
      echo $k1."<br />"; 
       foreach ($v1 as $k2 => $v2) { 
        echo "--".$k2."<br />----".$v2."<br />"; 
       } 
      $i++; 
     } 
     echo "<br /<br />"; 
} 
?> 
関連する問題