Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Двумерный массив
 
 автор: kilogram   (29.04.2012 в 22:42)   письмо автору
 
 

Не получается вывести двумерный массив. Читал вроде в учебнике что циклы могут не обязательно одинаковой длины строки и стобцы быть, вот попробовал написать код, чего-то не срабатывает.


<?php
$trans 
= array(
 
0=> array("Мама","Папа","Дядя",),
 
=> -3
 
=> 105,
 
3=>500,
 
4=>'Andrey',
 
8=> array("Вася","Петя","Коля")
);


foreach(
$trans as $x
foreach(
$x as $y)
    echo 
$x.' '.$y.' ';
        
?>

  Ответить  
 
 автор: Киналь   (29.04.2012 в 23:06)   письмо автору
 
   для: kilogram   (29.04.2012 в 22:42)
 

Поиграю в интерпретатор) Я вам говорю:

Warning: Invalid argument supplied for foreach() in Z:\...\index.php on line 13

А сам себе думаю: от меня хотят foreach. Это что-то про массивы. А что мне дают? Мне дают «-3». А массив где? Это же int, ну string в крайнем случае. Warning!

  Ответить  
 
 автор: cheops   (29.04.2012 в 23:10)   письмо автору
 
   для: kilogram   (29.04.2012 в 22:42)
 

Если вы просто хотите посмотреть, что внутри массива, то удобно воспользоваться функцией print_r()
<?php
  
echo "<pre>";
  
print_r($trans);
  echo 
"</pre>";
?>

  Ответить  
 
 автор: kilogram   (29.04.2012 в 23:52)   письмо автору
 
   для: cheops   (29.04.2012 в 23:10)
 

Вот так заработало.

<?php
$trans 
= array(
 
0=> array("Мама","Папа","Дядя",),
 
=> -3
 
=> 105,
 
3=>500,
 
4=>'Andrey',
 
8=> array("Вася","Петя","Коля")
);

foreach(
$trans as $x)
{
    if (
is_array($x))
        foreach (
$x as $y)
            echo 
$y ' ';
    else
        echo 
$x ' ';
}
echo 
'Я справился!';
echo 
'<br />';

Если через фор попробовать вывести вот так, не захочет, захочет только если поменять индекс 8 на 5, странно как-то. 5=> array("Вася","Петя","Коля")

for ($i = 0; $i < count($trans); $i++)
{
    if (is_array($trans[$i]))
        for ($j = 0; $j < count($trans[$i]); $j++)
            echo $trans[$i][$j] . ' ';
    else
        echo $trans[$i] . ' ';
}

  Ответить  
 
 автор: kilogram   (30.04.2012 в 01:38)   письмо автору
 
   для: kilogram   (29.04.2012 в 23:52)
 

Ух-ты, вот так получилось.

<?php
$trans 
= array(
 
0=> array("Мама","Папа","Дядя",),
 
=> -3
 
=> 105,
 
3=>500,
 
4=>'Andrey',
 
8=> array("Вася","Петя","Коля")
);


if(!empty(
$r))echo 'не существует';

echo 
'<br />';

for (
$i 0$i count($trans); $i++)
{
    if(empty(
$trans[$i])) continue;
    if (
is_array($trans[$i]))
        for (
$j 0$j count($trans[$i]); $j++)
            echo 
$trans[$i][$j] . ' ';
    else
        echo 
$trans[$i] . ' ';
}
?>

  Ответить  
 
 автор: kilogram   (30.04.2012 в 03:03)   письмо автору
 
   для: kilogram   (30.04.2012 в 01:38)
 

Вот так правильнее, проверил секундомером с учетом если 10 млн номер индекса последний, код запускается чере 14,16 сек. в браузере.


<?php
$trans 
= array(
    
=> array("Мама","Папа","Дядя",),
    
=> -3
    
=> 105,
    
=> 500,
    
=> 'Andrey',
    
10000000 => array("Вася","Петя","Коля")
);
 
end($trans);
$max key($trans);
 
for (
$i 0$i <= $max$i++)
{
    if (!
array_key_exists($i$trans)) continue;
    if (
is_array($trans[$i]))
    for (
$j 0$j count($trans[$i]); $j++)
        echo 
$trans[$i][$j] . ' ';
    else
        echo 
$trans[$i] . ' ';
}
?>

  Ответить  
 
 автор: Sfinks   (01.05.2012 в 13:12)   письмо автору
 
   для: kilogram   (30.04.2012 в 03:03)
 

А чем вам foreach не угодил, что вы так изголяетесь?
Тогда уж правильнее будет так:
<?php
  $trans 
= array(
      
=> array("Мама","Папа","Дядя",),
      
=> -3,
      
=> 105,
      
=> 500,
      
=> 'Andrey',
      
10000000 => array("Вася","Петя","Коля")
  );

  
show_array$trans );

  function 
show_array($array)
  {
    
$keys array_keys($array);
    
$max count($keys);
    for (
$i 0$i $max$i++)
    {
      if (
is_array$array[$keys[$i]] ))
        
show_array$array[$keys[$i]] );
      else
        echo 
$array[$keys[$i]] . ' ';
    }
  }
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования