Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting Data From Multi-level Array

Question below.

This is the solution I came up with based on Pixeler's answer.

<?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")
              );
?>

Is it possible to take what's above and get the text for each value by calling a number? How could I do something like this?...

<?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: The idea is that I can return the first level (Apples, Oranges, Grapes), second level (Red, Green, Navel, Purple, Green), and third level ($2.95, $2.45, $4.95, $3.75, $3.25) by calling a number.

For example, I want to do something like this:

<?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: It is important to note that I cannot use words to call the data. I must use numbers, i.e. [0] to call the first item in the array, because Apples could change depending on what row of data I load from my database. In other words... Apples could actually turn out to be Books, and Red could turn out to be the name of the book => price.

I'm intending on using serialize/unserialize to store and retrieve the data from the database, although I'm not overly familiar with these functions, I had a brief look at them and they seem reasonably easy to use.


I've been researching for hours but I cant find anything. It is vital that I am able to call the data by numbers, not text. So $array["Apples"] is unacceptable.

I have also looked at json_decode and serialize/unserialize, and I think I get the basic idea of them from a brief look... but I think my main issue is understanding how to call the above data as presented in my example. Any help would be really great.

like image 421
Jack Smith Avatar asked Apr 14 '26 20:04

Jack Smith


1 Answers

This is the solution I came up with based on @Pixeler's answer.

<?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 />";
}
?>
like image 62
Jack Smith Avatar answered Apr 17 '26 09:04

Jack Smith



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!