从多级数组中获取数据

时间:2011-10-29 19:37:14

标签: php arrays multidimensional-array explode multi-level

下面的问题。

这是我根据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)
?>

编辑:我的想法是我可以返回第一级(苹果,橘子,葡萄),第二级(红色,绿色,肚脐,紫色,绿色)和第三级(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
}

?>

编辑:请务必注意,我无法使用文字来调用数据。我必须使用数字,即[0]来调用数组中的第一项,因为苹果可能会根据我从数据库加载的数据行而改变。换句话说......苹果实际上可能是书籍,而红色可能会成为书籍的名称=&gt;价。

我打算使用serialize / unserialize来存储和检索数据库中的数据,虽然我对这些功能并不太熟悉,但我简单地看了一下它们看起来相当容易使用。


我一直在研究几个小时但我找不到任何东西。 至关重要的是,我能够通过数字而不是文本来调用数据。所以$ array [“Apples”]是不可接受的。

我也看过json_decode和序列化/反序列化,我想我从简短的看看得到了它们的基本概念......但我认为我的主要问题是如何调用我的示例中所示的上述数据。任何帮助都会非常棒。

2 个答案:

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

答案 1 :(得分:0)

这个怎么样?

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

如果你想以这种或那种方式循环你的数组,你可能需要创建新数组,循环遍历旧数组并创建新的数值数组数组?

第一天


$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>';

第二种方式


$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];

显然我会先推荐。