Задачка на поиск дружественных чисел. Для подбора чисел использую цикл в цикле , и проверяю с помощью функции check($i,$j) . Когда вывожу результат $arr сразу на монитор то все получается но когда пытаюсь присвоить результат переменной уже ничего не работает. Помогите пожалуйста разобраться что я неправильно делаю. PHP: (friendlyupto(300)); function friendlyupto($num){ for ($i=1; $i<=$num ; $i++) { for ($j=1; $j<=$num ; $j++) { print_r($arr[]=(check($i,$j))); } } // print_r($arr); почему не работает если снять коммент ? }; function check($var1,$var2){ $arrr=[]; $sum1=0; $sum2=0; if($var1!=$var2){ $sum1 = array_sum(dividers($var1)); $sum2 = array_sum(dividers($var2)); }; if($sum1==$var2 and $sum2==$var1){ return [$var1,$var2]; } else { return false; } } function dividers($var){ $arr=[]; for ($i=1; $i < $var; $i++) { if($var%$i==0){ $arr[]=$i; } } return $arr; }
Потому, что это локальная переменная. Почитайте об области видимости переменных. Используете print_r() вместо return
Не гони дичь, не в области видимости тут дело, а в том что когда снимает коммент, его "почему не работает если снять коммент ?" убивает синтаксис кода.
Врать не буду - не проверял. И вряд ли бы пришло такое в голову. Но мне кажется в этом случае print_r должен возвращать bool, а не выводить саму переменную. Если есть желание позвенеть эрудицией, то опровергайте.
ТС, на самом деле это обычное поведение PHP если видите, что, что то не работает, лучше расписать на мелкий код и станет все ясно. предлагаю просто 6(именно!) строчку расписать - добавить 2-3 строчки и все заработает
Так задачу-то обозначьте. Вы показали её решение, которое по вашим же словам не работает. Вам посочувствовать?
@AntonSa, check() возвращает либо false, либо массив из двух значений. В любом случае в данной редакции значение пишется в результирующий массив. В итоге получаете огромный массив, в котором за исключением двух искомых элементов содержатся ненужные значения false. Вот вариант: песочница.