Сведения о вопросе

Junior

01:28, 5th August, 2020

Теги

Итерация по сложному ассоциативному массиву в PHP

Просмотров: 370   Ответов: 7

Есть ли простой способ перебрать ассоциативный массив этой структуры в PHP:

Массив $searches имеет нумерованный индекс, содержащий от 4 до 5 ассоциативных частей. Поэтому мне нужно не только перебирать $searches[0] через $searches[n], но и $searches[0]["part0"] через $searches[n]["partn"] . Трудная часть заключается в том, что разные индексы имеют разное количество частей (некоторые могут отсутствовать один или два).

Мысли о том, чтобы сделать это так, чтобы это было приятно, аккуратно и понятно?



  Сведения об ответе

padenie

15:40, 29th August, 2020

Я знаю, что это вопрос некромантии, но перебирать многомерные массивы легко с Spl итераторами

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

foreach($iterator as $key=>$value) {
    echo $key.' -- '.$value.'<br />';
}

Видеть


  Сведения об ответе

piter

23:00, 23rd August, 2020

Вложите две петли foreach :

foreach ($array as $i => $values) {
    print "$i {\n";
    foreach ($values as $key => $value) {
        print "    $key => $value\n";
    }
    print "}\n";
}


  Сведения об ответе

прога

02:44, 11th August, 2020

Похоже, это хорошее место для рекурсивной функции, esp. если у вас будет больше двух уровней глубины.

function doSomething(&$complex_array)
{
    foreach ($complex_array as $n => $v)
    {
        if (is_array($v))
            doSomething($v);
        else
            do whatever you want to do with a single node
    }
}


  Сведения об ответе

padenie

03:22, 5th August, 2020

Вы должны иметь возможность использовать вложенный foreach statment

из руководства php

/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
    foreach ($v1 as $v2) {
        echo "$v2\n";
    }
}


  Сведения об ответе

SKY

05:56, 23rd August, 2020

Можете ли вы просто перебрать все элементы "part[n]" и использовать isset, чтобы увидеть, существуют ли они на самом деле или нет?


  Сведения об ответе

nYU

20:38, 9th August, 2020

Я действительно не уверен, что вы имеете в виду здесь - конечно, пара петель foreach делает то, что вам нужно?

foreach($array as $id => $assoc)
{
    foreach($assoc as $part => $data)
    {
        // code
    }
}

Или вам нужно что-то рекурсивное? Я был бы в состоянии помочь больше с примерами данных и контекстом в том, как вы хотите, чтобы данные возвращались.


  Сведения об ответе

KOMP

01:18, 16th August, 2020

Рассмотрим этот многодиментный массив, я надеюсь, что эта функция поможет.

$n = array('customer' => array('address' => 'Kenmore street',
                'phone' => '121223'),
      'consumer' => 'wellington consumer',
      'employee' => array('name' => array('fname' => 'finau', 'lname' => 'kaufusi'),
                     'age' => 32,
                 'nationality' => 'Tonga')
      );



iterator($n);

function iterator($arr){

    foreach($arr as $key => $val){

    if(is_array($val))iterator($val);

    echo '<p>key: '.$key.' | value: '.$val.'</p>';

    //filter the $key and $val here and do what you want
    }

}


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться