2010-11-16 9 views
1

У меня есть массив в массив, и я хотел бы, чтобы просто распечатать содержимое этого ... проблема в том, что я стараюсь не работать ... т.е.Отображение массива внутри массива?

 foreach($retval as $k=>$v){ 

      if (is_array($v)){ 

      foreach($v as $l=>$w){ 

      echo $l . ' = ' . $w . '<br />'; 

      } 

     } else { 

      echo $k . ' = ' . $v . '<br />'; 

     } 

Делать это однако я в конечном итоге с:

ид = 2

имя = Спикеры

form_field = скрытый

display_order = 0

группы = Array

Так что я не получаю Еогеасп в том, что внутри массива .. что я делаю неправильно? Кажется, что мой код считает, что возвращение - массив, когда я уверен, что только «группы» - это массив.


структура массива выглядит так:

array (0 => array ('id' => 2, 'name' => 'Speakers', 'form_field' => 'hidden', 'display_order' => '0', 'groups' => array (0 => array ('bit' => '1', 'name' => 'don', 'display_order' => '4', 'subscribers' => 8,), 1 => array ('bit' => '2', 'name' => 'tyler', 'display_order' => '5', 'subscribers' => 0,), 2 => array ('bit' => '4', 'name' => 'stephen', 'display_order' => '6', 'subscribers' => 0,), 3 => array ('bit' => '8', 'name' => 'daniel', 'display_order' => '7', 'subscribers' => 0,), 4 => array ('bit' => '16', 'name' => 'william', 'display_order' => '8', 'subscribers' => 0,), 5 => array ('bit' => '32', 'name' => 'bobbys', 'display_order' => '9', 'subscribers' => 0,),),),) 

Короче говоря, я на самом деле просто пытается найти всю эту вещь для сказать название «Bobby» и получить простую истину или false о том, существует ли это значение там, где есть.

+0

, что ваша структура массива выглядит? вы можете распечатать его с помощью 'var_export ($ retval)' – drudge

+0

спасибо за это - я обновил сообщение. – willdanceforfun

+1

FWIW, ваш вложенный 'foreach()' не отображает никаких отступов, поэтому он будет создавать вводящий в заблуждение вывод. – staticsan

ответ

1

Вы предполагаете, что массивы только дважды вложены, когда $retval[<something>]['groups'] также является массивом. Используйте рекурсию для обработки, вместо того, чтобы добавлять уровни на уровнях.

+0

они идут глубже, чем 2 уровня?!? это безумие – willdanceforfun

+0

спасибо ignacio, я ищу рекурсивный поиск вещей сейчас. – willdanceforfun

+0

Я работал с массивами из семи измерений с петлями, вложенными в четыре глубины. Принял некоторое планирование, позвольте мне рассказать вам. – staticsan

3
print_r($myArray); 

PHP Manual

<?php 
    $a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z')); 
    print_r ($a); 
?> 

даст:

Array 
(
    [a] => apple 
    [b] => banana 
    [c] => Array 
     (
      [0] => x 
      [1] => y 
      [2] => z 
     ) 
) 

Не уверен, если это то, что вы ищете ...

print_r() дает визуальное представление то время как var_export() возвращает действительный, исполняемый PHP-код. Manual: var_export()

+0

Я ценю это. приветствия розовый флойд – willdanceforfun

1

Использовать RecursiveArrayIterator, завернутый в RecursiveIteratorIterator. Синтаксис тогда будет:

$arr = array('this is your complicated multi-dimensional array'); 
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 
foreach($iterator as $key => $value){ 
    echo '['.$key.'] => '.$value.'<br />'; 
} 

Вы можете даже использовать $iterator->depth() для определения глубины текущего элемента.

1

Похоже, вам нужно пересмотреть то, что вы пытаетесь сделать.

Если вы просто хотите увидеть, что находится в вашем массиве, чтобы вы знали, как получить конкретный фрагмент данных, тогда вы будете probabaly после print_r, var_export или подобных, как указано выше.

print_r($retval); 

Если вы хотите, чтобы ваш скрипт, чтобы иметь возможность работать на своем собственном ли «бобби» в массиве, то вы могли бы иметь больше информации, которая поможет поиску. Например, знаете ли вы структуру вашего массива и что вы ищете имя?Если это так, вам нужно только проверить строки, которые находятся в $ array [$ foo] ['name']. Вы можете адаптировать свой код следующим образом:

foreach($retval as $k=>$v) { 
    if ($v['name'] == 'bobby') { 
     echo "Bobby is at index $k"; 
    } 
} 

PHP содержит lots of functions for arrays, хотя они, как правило, для одного измерения массивов.

P.S. Измените структуру своего массива, чтобы упростить ее чтение.

1

Если ваша цель состоит в том, чтобы понять, является ли значение в любом вложенном массиве вы можете сделать это:

foreach($retval as $vec){ 
    if(in_array("bobby", $vec) 
     do something 
Смежные вопросы