Как использовать foreach для проверки значения в 3-мерном массиве, не дублируя вывод в php? - PullRequest
0 голосов
/ 19 января 2011

Привет, мой вопрос немного сложен, я получил 3-мерный массив и попытался проверить значение 3-го уровня и повторить значения 1-го и 3-го уровня. Ниже приведен пример кода, и мои неудачные подходы.

$myArray=array(
"mySub0" => arrary(
  0 => array("mySubSub0" => "1","mySubSub1" => "a"),
  1 => array("mySubSub0" => "2","mySubSub1" => "b"),
  2 => array("mySubSub0" => "3","mySubSub1" => "b"),
 ),
 "mySub1" => arrary(
  0 => array("mySubSub0" => "4","mySubSub1" => "a"),
  1 => array("mySubSub0" => "5","mySubSub1" => "a"),
  2 => array("mySubSub0" => "6","mySubSub1" => "a"),
 ),
 "mySub2" => arrary(
  0 => array("mySubSub0" => "7","mySubSub1" => "a"),
  1 => array("mySubSub0" => "8","mySubSub1" => "b"),
  2 => array("mySubSub0" => "9","mySubSub1" => "a"),
 ),
),

Я хочу проверить, является ли значение mySubSub1 b. если да, отобразите значение «mySubSub0» и связанный ключ на первом уровне массива. Должно быть так:

mySub0
2
3
mySub2
8

Мой неудачный подход

 foreach ($myArray as $a => $b)
 {
 foreach ($b as $c)
 if($c[mySubSub1]=="b")
    {
        echo $a
        echo $c[mySubSub0];
    }
 else {
    }
 }

В результате будет один дубликат mySub0

 mySub0
 2
 mySub0
 3
 mySub2
 8

если я уберу "echo $ a" из "если"

foreach ($myArray as $a => $b)
 {
 echo $a
 foreach ($b as $c)
 if($c[mySubSub1]=="b")
        {
        echo $c[mySubSub0];
    }
 else {
    }
 } 

результат будет

 mySub0
 2
 3
 mySub1
 mySub2
 8

один нежелательный «mySub1», потому что негде проверить, есть ли значение b.

Это очень беспокоило меня сегодня. Я пытался Google, но не нашел правильный ответ. Очень надеюсь, что кто-то может мне помочь. Заранее спасибо

1 Ответ

0 голосов
/ 19 января 2011

Вот то, что должно работать:

function find_value($arr, $key, $value, $sibling)
{
    foreach ($arr as $k => $v)
    {
        $results = _find_value($v, $key, $value, $sibling);
        if (count($results) > 0) {
            echo $k;
            foreach ($results as $result) {
                echo $result;
            }
        }
    }
}

function _find_value($arr, $key, $value, $sibling)
{
    $out = array();
    foreach ($arr as $k => $v)
    {
        if ($v[$key] == $value)
            $out[] = $v[$sibling];
    }
    return $out;
}

find_value($myArray, "mySubSub1", "b", "mySubSub0");

По сути, основная функция циклически перебирает элементы во внешнем массиве, вызывая внутреннюю функцию, чтобы получить список «родственных» ключей, где совпадает основной ключзначение, которое вы ищете.Если во внутренней функции, эхо и цикле получено ненулевое число результатов.

Надеюсь, это поможет вам.

...