Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Двумерный массив (https://javascript.ru/forum/server/27929-dvumernyjj-massiv.html)

kilogram 29.04.2012 22:40

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

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


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

kilogram 29.04.2012 23:55

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

Код:

<?php
$trans = array(
 0=> array("Мама","Папа","Дядя",),
 1 => -3,
 2 => 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:32

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

Код:

<?php
$trans = array(
 0=> array("Мама","Папа","Дядя",),
 1 => -3,
 2 => 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 02:57

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

<?php
$trans = array(
    0 => array("Мама","Папа","Дядя",),
    1 => -3, 
    2 => 105,
    3 => 500,
    4 => '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] . ' ';
}
?>

devote 30.04.2012 03:29

а чем foreach не угодил?
foreach( $array as $key => $value ) {
}

Gvozd 30.04.2012 08:46

Цитата:

Сообщение от kilogram
проверил секундомером

всмысле вы реально взяли секундомер и им меряли время загрузки страницы?

kilogram 01.05.2012 13:45

Да, на телефоне нокиа 1200 есть секундомер, им проверил.

Gvozd 01.05.2012 14:07

Цитата:

Сообщение от kilogram
Да, на телефоне нокиа 1200 есть секундомер, им проверил.

очень печальная история эта.
Есть более вменяемые способы измерения времени выполнения скриптов:
1)время выполнения скрипта на PHP
<?php
$start_time = microtime(true);
//измеряемый код
var_dump(round(microtime(true) - $start_time, 4));

2)время загрузки страницы - можно посмотреть в консоли разработчика во вкладке "сеть".
Сейчас консоль разработчика есть в каждом более-менее популярном десктопном браузере.
время загрузки основного файла складывается из мремени выоплнения скрипта, и времени загрузки его по сети
Последнее, в случае тестировании на локальной машине - мало, и иногда им можно пренебречь
3) время выполнения JS-скрипта(способ в консоли разработчика)
console.time('timer1');
//измеряемый код
console.timeEnd('timer1');

4)время выполнения JS-скрипта(нативный, без консоли)
var start = (new Date).getTime();
//измеряемый код
alert((new Date).getTime() - start);


Часовой пояс GMT +3, время: 15:39.