За последние 24 часа нас посетили 52369 программистов и 1756 роботов. Сейчас ищут 2120 программистов ...

опять цикл for

Тема в разделе "PHP для новичков", создана пользователем ministr, 1 май 2011.

  1. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    Почему не выполняется второй цикл for?
    PHP:
    1. <?php ## Логические переменные
    2. $matrix = array( $i => 1);
    3.  
    4. for ($i=0; $i<count($matrix); $i++) {
    5.     echo 'первый for выполнился';  
    6. for ($j=0; $j<count($matrix[$i]); $j++) {
    7.     echo 'второй for выполнился';
    8. if ($matrix[$i][$j] == 0) break(2);
    9. }
    10. }
    11. if ($i < 10) echo 'Найден нулевой элемент в матрице!';
    12.  
    13. ?>
     
  2. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    потомучто вы задали одномерный массив
    и второй меры у него нет поэтому count($matrix[$i]) возвращает 0 ибо там ничего нет

    ремейк

    PHP:
    1.  <?php ## Логические переменные
    2. for ($i=0; $i<5; $i++) {
    3.     for ($j=0; $j<5; $j++) {
    4.         $matrix[$i][$j] = mt_rand(0,4);
    5.     }
    6. }
    7. for ($i=0; $i<count($matrix); $i++) {
    8.      for ($j=0; $j<count($matrix[$i]); $j++) {
    9.         if ($matrix[$i][$j] == 0)  {
    10.             $i = false;
    11.             break 2;
    12.         }
    13.     }
    14. }
    15. if (!$i) echo 'Найден нулевой элемент в матрице!'.$j.;
    16. print '<pre>';
    17. print_r ($matrix);
     
  3. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    Alex_pac, спасибо за пример и ответ.

    Вам не кажется странным, почему echo не выводит значения массива? Мне кажется .

    PHP:
    1.     for ($j=0; $j<5; $j++) {
    2.          $matrix[$i][$j] = mt_rand(0,4);
    3.          
    4.      }
    5.  
    6. echo $matrix[$i][$j];
    7. ?>
     
  4. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    ministr, и не должно выводить. ведь вы уже покинули цикл, значение $j будет равно 5. $matrix[$i][5] == NULL, поэтому ничего и не отображается
     
  5. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    ministr вам знакомо слово VAR из паскаля?

    в php оно тоже есть но его не видно.

    надо сначала обозначить и дать значение переменной

    в вашем случае это переменная $i

    у меня складывается впечатление, что вы вообще с программированием мало знакомы. И вам надо занятся изучением самых основ чтобы не задавать таких глупых вопросов.
     
  6. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    Ну а вот так выводит

    PHP:
    1. <?php ## Логические переменные
    2.  
    3. for ($j=0; $j<5; $j++) {
    4.          $matrix[$a][$b] = mt_rand(0,4);
    5.          
    6.      }
    7.  echo $matrix[$a][$b];
    8.  
    9. ?>
     
  7. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    потому что $matrix[$a][$b] эквивалентно $matrix[0][0] в случае, если $a и $b не были инициализированы
     
  8. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    titch, я вас не пойму, почему значение переменной $b будет равно 0, когда функцией mt_rand присваевается значение переменной $b с промежутком выбора цифры от 0 до 4.
     
  9. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
  10. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    сообщение удалено
     
  11. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    сообщение удалено
     
  12. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    ну она иницилизирована. Переменная $b приняла значение в рамках от 1 до 4. Где она не иницилизирована? В глобальной видимости? А скакого перепуга она не должна быть видна?
     
  13. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    Ну что, мне так и не ответит, почему в первом примере eсho выводит значения пременной массива а во втором нет.
    PHP:
    1.   <?php ## Логические переменные
    2.  
    3.  for ($j=0; $j<5; $j++) {
    4.          
    5.          $matrix = array ( "$a" => array( "$j" => "b" ));
    6.          
    7.      }
    8.      echo $matrix ["$a"]["$j"];
    9.  
    10.  ?>
    PHP:
    1.  <?php ## Логические переменные
    2.  
    3.  for ($j=0; $j<5; $j++) {
    4.          
    5.          $matrix = array ( "a" => array( "j" => "b" ));
    6.          
    7.      }
    8.      echo $matrix ["a"]["j"];
    9.  
    10.  ?>
     
  14. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    тк элемента $matrix[NULL][5]; несуществует

    цикл последним объявляет $matrix[NULL][4]

    поэтому надо вывести

    $matrix[$i][$j-1]
     
  15. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    Понял, понял. Спасибо.
     
  16. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    titch
    следи не за форматированием, а за фигурными скобками ;)
     
  17. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    получается имя ключа в массиве не стоит указывать через '$' т. к. это ведёт к неявному имени ( псевдониму) ключа.
     
  18. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    к какому еще псевдому ключа
    Ключи абсолютно идентичны, не важно откуда они взялись
    PHP:
    1.  
    2. <?php
    3. $arr1 = array(0=>'a', 1=>'b', 2=>'c');
    4.  
    5. $arr2 = array();
    6. $let = array('a', 'b', 'c');
    7. for ($i=0; $i<=2; $i++) {
    8.      $arr2[$i] = $let[$i];
    9. }
    10.  
    11. var_dump($arr1 == $arr2);
     
  19. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    Видите, сейчас массив не вызывается. потому-что нет такого ключ больше $a. Поэтому я и говорю, что лучше не ставить первым символ '$' в ключе т.к. впоследствий , кажется простые пременные могут изменит массив.
    PHP:
    1.  <?php
    2.  
    3.  $arr1 = array($a =>'a', 1=>'b', 2=>'crfht');
    4.  
    5.  
    6.  $a = 5;
    7.  
    8.  
    9.  print $arr1[$a]
    10.  ?>
     
  20. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    нет, все не так.
     
  21. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
  22. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    А если вот так. Как тогда вызвать значения 'a' ключа $a? Да, читал я про массивы, но я на самом деле не могу разобраться с ключами в виде переменных.
    PHP:
    1.  <?php
    2.  
    3.  $arr = array($a =>'a', 1=>'b', 2 => array( $b => 'j', 1 => 'e'));
    4.  
    5.  
    6.  $a = 5;
    7.  
    8.  
    9.  ?>
     
  23. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Чувак, у тебя проблемы с левым полушарием мозга? Когда ты объявляешь переменную $arr, переменной $a еще не существует. И $b тоже.
    Вместо неё - null, поэтому
    PHP:
    1. echo $arr[null];
     
  24. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
  25. ministr

    ministr Активный пользователь

    С нами с:
    15 апр 2011
    Сообщения:
    39
    Симпатии:
    0
    Alex_pac, ну это ваше дело.