2015-10-10 3 views
-1

Что такое многомерный массив (2D, 3D или какой предел в многомерном массиве) и foreach()? foreach() используется для печати значений внутри массива? В случае многомерного массива, почему важна вложенная петля?запутанный многомерный массив в php с ошибкой получения foreach

Ошибки:

Примечание: Массив для преобразования строки в C: \ XAMPP \ HTDOCS \ например \ базовая \ foreach2.php на линии 9 Arrayarray (3) {[0] => Int (4) [1] => INT (5) [2] => INT (7)}

Примечание: Массив для преобразования строки в C: \ XAMPP \ HTDOCS \ например \ базовая \ foreach2.php на строка 11

$items = array(1,2,3, 
     array(4,5,7 
    ), 
    8,54,4,5,5); 
foreach($items as $key => $value) 
{ 
    echo $value; 
    var_dump($value); 
    echo $key ."pair match".$value . "<br>"; 
} 

Как получить доступ к этому массиву?

 $a_services = array(
     'user-login' => array(
      'operations' => array(
      'retrieve' => array(
       'help' => 'Retrieves a user', 
       'callback' => 'android', 
       'file' => array('type' => 'inc', 'module' => 'android_services'), 
       'access callback' => 'services', 
       'args' => array(
       array(
        'name' => 'phone_no', 
        'type' => 'string', 
        'description' => 'The uid ', 
        'source' => array('path' => 0), 
        'optional' => FALSE, 
       ), 
      ), 
      ), 
     ), 
     ), 
     ); 
    print_r($a_services['$android_services ']['user-login']['operations']['retrieve']['callback']); 
print_r($a_services['$android_services ']['user-login']['operations']['retrieve']['callback']['args']['name']); 

Ошибка 1. Примечание: Массив для преобразования строки 2. Неопределенного индекса: $ android_services 3. Как напечатать с помощью Еогеаспа 4. выше массива 4 мерной ??????

+0

http://php.net/manual/en/language.types.array.php –

+0

Есть миллионы примеров для доступа к значениям вложенных массивов только здесь, на SO. Ничто из этого не помогло понять? _Почему нет? – arkascha

ответ

0

Чтобы пройти через этот массив, вам нужна какая-то рекурсивность.

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

Что-то вроде:

foreach($a_services as $key => $value) { 
    do_your_thing($value); 
} 

function do_your_thing($recvalue) 
{ 
    if (is_array($recvalue)) 
    { 
     foreach($recvalue as $key => $value) 
     { 
      do_your_thing($value); 
     } 
    } 
    else 
    { 
     echo $recvalue; 
    } 
    return $recvalue; 
} 
0

Вы можете определить многомерные массивы (массивы, включая Oher массивы) в PHP.

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

$lists = array(
    'grocery' => array('banana', 'apple'), 
    'tasks' => array('go to work', 'wash dishes'), 
); 

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

foreach($lists as $list) 
    return $list; // returns grocery[] and tasks[] 

Как вы видите, этот цикл возвращает другой цикл. Поэтому, если вам нужно перечислить все элементы массива бакалеи [], вам нужно снова итератировать в этом массиве.

foreach($lists as $list) 
    foreach($list as $k => $l) 
     if($k == 'grocery') 
      echo $l; // echos "banana","apple" 

Вложенные циклы очень важны (и необходимо), чтобы достигнуть многомерных массивов содержимое, особенно если вы не знаете структуру массива. Эти петли найдут для вас все элементы массива. Но если вы знаете структуру, вы можете напрямую использовать $lists['grocery'] для достижения бакалеи или $lists['grocery'][0], чтобы достичь первого элемента вашего списка продуктов.

Смежные вопросы