За последние 24 часа нас посетили 20604 программиста и 1126 роботов. Сейчас ищут 647 программистов ...

что не правильно в работе с циклами ?

Тема в разделе "PHP для новичков", создана пользователем AntonSa, 3 янв 2022.

  1. AntonSa

    AntonSa Новичок

    С нами с:
    3 янв 2022
    Сообщения:
    3
    Симпатии:
    0
    Задачка на поиск дружественных чисел. Для подбора чисел использую цикл в цикле , и проверяю с помощью функции check($i,$j) . Когда вывожу результат $arr сразу на монитор то все получается но когда пытаюсь присвоить результат переменной уже ничего не работает. Помогите пожалуйста разобраться что я неправильно делаю.

    PHP:
    1. (friendlyupto(300));
    2.  
    3.     function friendlyupto($num){
    4.       for ($i=1; $i<=$num ; $i++) {
    5.             for ($j=1; $j<=$num ; $j++) {
    6.                 print_r($arr[]=(check($i,$j)));
    7.  
    8.                }
    9.             }
    10.      // print_r($arr);  почему не работает если снять коммент ?
    11.     };
    12.  
    13.  
    14.     function check($var1,$var2){
    15.      $arrr=[];
    16.      $sum1=0;
    17.      $sum2=0;
    18.  
    19.             if($var1!=$var2){
    20.             $sum1 = array_sum(dividers($var1));
    21.             $sum2 = array_sum(dividers($var2));
    22.             };
    23.  
    24.             if($sum1==$var2 and $sum2==$var1){
    25.                return [$var1,$var2];
    26.              } else {
    27.                return false;
    28.              }
    29.     }
    30.  
    31.    function dividers($var){
    32.      $arr=[];
    33.        for ($i=1; $i < $var; $i++) {
    34.            if($var%$i==0){
    35.               $arr[]=$i;
    36.            }
    37.        }
    38.        return $arr;
    39.     }
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Привыкай сразу говорить, что именно не работает
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    синтаксическая ошибка, умей читать и исправлять, а не игнорировать и прятать. Конец.
     
  4. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Потому, что это локальная переменная.
    Почитайте об области видимости переменных.
    Используете print_r() вместо return
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Не гони дичь, не в области видимости тут дело, а в том что когда снимает коммент, его "почему не работает если снять коммент ?" убивает синтаксис кода. o_O
     
  6. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Врать не буду - не проверял. И вряд ли бы пришло такое в голову.
    Но мне кажется в этом случае print_r должен возвращать bool, а не выводить саму переменную.
    Если есть желание позвенеть эрудицией, то опровергайте.
     
  7. AntonSa

    AntonSa Новичок

    С нами с:
    3 янв 2022
    Сообщения:
    3
    Симпатии:
    0
    Очень интересно но ничего не понятно )
     
  8. Boothooz

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

    С нами с:
    8 май 2016
    Сообщения:
    63
    Симпатии:
    6
    ТС, на самом деле это обычное поведение PHP
    если видите, что, что то не работает, лучше расписать на мелкий код и станет все ясно.

    предлагаю просто 6(именно!) строчку расписать - добавить 2-3 строчки и все заработает
     
  9. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Так задачу-то обозначьте.
    Вы показали её решение, которое по вашим же словам не работает.
    Вам посочувствовать?
     
  10. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @AntonSa, check() возвращает либо false, либо массив из двух значений.
    В любом случае в данной редакции значение пишется в результирующий массив.
    В итоге получаете огромный массив, в котором за исключением двух искомых элементов содержатся ненужные значения false.
    Вот вариант: песочница.
     
  11. AntonSa

    AntonSa Новичок

    С нами с:
    3 янв 2022
    Сообщения:
    3
    Симпатии:
    0
    Спасибо большое за объяснение !!