Получение данных из многоуровневого массива - PullRequest
3 голосов
/ 29 октября 2011

Вопрос ниже.

Это решение, которое я придумал на основе ответа Пикселера.

<?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], чтобы вызвать первый элемент в массиве, потому что яблоки могут меняться в зависимости от того, какую строку данных я загружаю из моей базы данных. Другими словами ... Яблоки могут фактически оказаться Книгами, а Красный может оказаться названием книги => цена.

Я собираюсь использовать serialize / unserialize для хранения и извлечения данных из базы данных, хотя я не слишком знаком с этими функциями, я кратко их рассмотрел, и они кажутся достаточно простыми в использовании.


Я часами искал, но ничего не могу найти. Очень важно, чтобы я мог называть данные по номерам, а не по тексту. Так что $ array ["Apples"] неприемлемо.

Я также посмотрел на json_decode и serialize / unserialize, и я думаю, что я получаю основную идею о них из краткого обзора ... но я думаю, что моя главная проблема заключается в понимании того, как вызвать вышеуказанные данные, как представлено в моем примере , Любая помощь будет очень полезна.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Это решение, которое я придумал на основе ответа @ 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 />";
}
?>
0 голосов
/ 29 октября 2011

А как насчет этого?

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

Если вы хотите зациклить свой массив тем или иным способом, возможно, вам придется создать новый массив, пройтись по старому массиву и создать новый массив числовых массивов?

ПЕРВЫЙ ПУТЬ


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

ВТОРОЙ ПУТЬ


<code>$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 '
';echo $ newArray [0] [0];

Очевидно, я буду рекомендовать первый способ.

...