【问题标题】:Getting Data From Multi-level Array从多级数组中获取数据
【发布时间】:2011-12-17 23:29:49
【问题描述】:

下面的问题。

这是我根据 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] 来调用数组中的第一项,因为苹果可能会根据我从数据库加载的数据行而改变。换句话说……苹果实际上可能是书,而红色可能是书名 => 价格。

我打算使用序列化/反序列化来存储和检索数据库中的数据,虽然我对这些功能不是很熟悉,但我对它们进行了简短的了解,它们似乎相当容易使用。


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

我还查看了 json_decode 和 serialize/unserialize,我想我通过简要的了解了解了它们的基本概念......但我认为我的主要问题是理解如何调用上述数据,如我的示例中所示.任何帮助都会非常棒。

【问题讨论】:

  • 所以您想像使用数字数组一样使用该数组,但您还想知道示例数是多少:Grapes -&gt; Purle?如果您想将此类数组保存在数据库中,我还建议您使用serializeunserialize
  • 是的,我想是的。如果有意义的话,我希望能够返回每个单词,“Apples”、“Red”和“$2.95”。但我希望能够仅使用数字返回所有这些值。
  • 我猜你将不得不重新考虑你想做什么。仅使用关联数组和数字数组从 mysql 获取数据并不容易。你会同时拥有它们,你可以做任何你想做的事情。否则,您将不得不创建多个数组,比较它们,尝试查找索引号等。等等。您最终只会编写很多行代码。
  • 我实际上只是根据您的代码弄清楚了如何做到这一点:D。我一会儿再分享。
  • @Jack Smith:请添加您的解决方案作为答案(而不是在您的问题之上)。然后接受它(或让您接受它以纪念用户支持的那个)。

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


【解决方案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 />";
}
?>

【讨论】:

    【解决方案2】:

    这个呢?

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

    显然我会推荐第一种方式。

    【讨论】:

    • 那将是完美的,但苹果可能会变成许多不同的东西。这就是为什么我需要按号码呼叫它。
    • 我正在更新我的问题以澄清。对不起。
    • 效果很好,但我剩下的唯一问题是如何获得“Apples”,我的意思是..我可以调用“Red”和“$2.95”,但我不能如果你明白我在说什么,请叫我在那个级别以上给出的名字。
    • 我添加了它的较短版本。抱歉,一开始不记得array_values()。我不能完全理解你的意思:(
    • 对不起,这是我的错 - 我不够清楚。我的意思是,您那里的代码非常适合返回价格值,但我还需要返回价格标签的值和数组组的名称。
    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 2017-01-04
    • 2012-07-21
    • 2019-11-04
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多