Имя: Пароль:
IT
Веб-мастеринг
PHP Чтение массива.
0 antihacker
 
05.10.17
08:49
Всем привет !

Вот работающий код

  for ($i = 0; $i < 5; $i++)
  {
    for ($j=0; $j < 2; $j++)
    {
       echo("".$root_site_list[$i][$j]."");
    }

    echo '<br />';
  }


?>

Но почем то это -echo("".$root_site_list[$i][$j]."") выодит только первые 2 символа содержимого. Почему ?
1 antihacker
 
05.10.17
09:00
Аданные добавляю так

$result = mysql_query("SELECT * FROM dbroot_site_tbl");
$root_site_list = array();
while($myrow=mysql_fetch_array($result))
{
//$root_site_list=array("".$myrow['root_site_id']."","".$myrow['root_site_name']."");
array_push($root_site_list,"".$myrow['root_site_id']."","".$myrow['root_site_name']."");



}

array_push($root_site_list,"Rear Window","Alfred Hitchcock");
array_push($root_site_list,"Full Metal Jacket","Stanley Kubrick");
2 Asmody
 
05.10.17
09:05
(0) потому что у тебя так написано.
[$j] для строки получает $j-ый символ.

Если ты думаешь, что $root_site_list - двумерный массив, то ты ошибаешься
3 Asmody
 
05.10.17
09:06
надо как-то так:

array_push($root_site_list
  , array("".$myrow['root_site_id'].""
    ,"".$myrow['root_site_name'].""
    )
  );
4 antihacker
 
05.10.17
09:13
НЕ только. Но и  $i , $j  перепутал местами ))

Спаисбо !
5 Asmody
 
05.10.17
09:20
И вообще, ожидать, что ты получишь из базы именно 5 записей, как-то эээ... непредусмотрительно.

Я бы переписал это всё вот так:

$result = mysql_query("SELECT * FROM dbroot_site_tbl");
$root_site_list = array();
while($myrow = mysql_fetch_array($result)) {
  $root_site_list[] = array( 'root_site_id'   => "".$myrow['root_site_id'].""
                           , 'root_site_name' => "".$myrow['root_site_name'].""
                           );
}
$root_site_list[] = array( 'root_site_id'   => "Rear Window"
                         , 'root_site_name' => "Alfred Hitchcock"
                         );
$root_site_list[] = array( 'root_site_id'   => "Full Metal Jacket"
                         , 'root_site_name' => "Stanley Kubrick"
                         );


foreach($root_site_list as $root_site) {
  echo( $root_site['root_site_id' );
  echo( $root_site['root_site_name' );
  echo( '<br />' );
}
6 antihacker
 
05.10.17
09:22
НЕт конечно. Я применил  count($root_site_list)
7 Asmody
 
05.10.17
09:25
(6) Для итерирования массива правильнее использовать foreach. Или array_map.
8 asady
 
05.10.17
10:08
(5) мне конструкция
"$myrow[root_site_id]"

больше нравится чем
"".$myrow['root_site_id'].""
9 antihacker
 
05.10.17
12:35
Тогда $myrow[root_site_id] превращеться просто в текст
10 Asmody
 
05.10.17
12:38
(9) а так: "".$myrow['root_site_id']."" оно во что превращается?
11 antihacker
 
05.10.17
14:20
Ни во что. Просто туда встанет  значение массива. А это что может быть угодно. А там рельано превращаеться в "$myrow[root_site_id]"
12 Asmody
 
05.10.17
14:40
(11) Не, чувак! Тебе надо основательно подтянуть матчасть. Вот тут, тут и, для полноты, тут.

В частности, оператор конкатенации '.' приводит аргументы к строковому представлению, а затем соединяет полученные строки. Причем, возможен такой эффект:

$a = 1.2; // $a -> 1.2 (число)
$b = 1 . 2; // $b -> '1.2' (строка)
13 Asmody
 
05.10.17
14:42
Обработка переменных в двойных кавычках работает быстрее, чем конкатенация. Т.е.

$a = "${b} ${c} ${d}";

будет быстрее, чем

$a = $b . " " . $c . " " .$d;
14 Asmody
 
05.10.17
14:43
Если обработка переменных в строке не требуется, лучше использовать строки в одинарных кавычках.
15 Asmody
 
05.10.17
14:44
В (12) опечатка

$b = 1 . 2; // $b -> '12' (строка)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший