2016-09-13 10 views
0

Я пытался создать программу для создания синтетического деления, которая требует факторизации, поэтому я написал эту функцию для вычисления целого числа, которое работает, но оно никогда не изменяет значения массива php $ факторов. Любая помощь будет принята с благодарностью.Невозможно изменить значения массива PHP

$factors=array(); 
$i; 
function factor($x){ 
    if($x==0){ 
     echo "(0,0)"; 
     } else { 
      $n=false; 
      if($x<0) { 
       $x=abs($x); 
       $n=true; 
      } 
      for($i=2; $i<=$x; $i++) { 
       if($x%$i==0){ 
        if($n){ 
         $factors[(count($factors))]=(-1*($x/$i)); 
         $factors[(count($factors))]=($i); 
         $factors[(count($factors))]=($x/$i); 
         $factors[(count($factors))]=(-1*$i); 
        } else { 
         $factors[(count($factors))]=($x/$i); 
         $factors[(count($factors))]=($i); 
        } 
       } 
      } 
     } 
    } 
factor(-4); 
+0

Где возвращение? они меняются, но вы ничего не возвращаете. И ваш массив '$ factor' находится за пределами области функций. – ArtisticPhoenix

+0

Это потому, что '$ factor' находится вне функции. если вы хотите прямо изменить его в функции, не возвращая ее или не передавая адрес памяти, вам нужно использовать ['global'] (http://php.net/language.variables.scope) в функции для управления ее scopre –

+0

глобальный настолько уродливый .... – ArtisticPhoenix

ответ

0

Попробуйте

function factor($x){ 
    $factors=array(); 
    if($x==0){ 
     echo "(0,0)"; 
    } else { 
     $n=false; 
     if($x<0) { 
      $x=abs($x); 
      $n=true; 
     } 
     for($i=2; $i<=$x; $i++) { 
      if($x%$i==0){ 
       if($n){ 
        $factors[(count($factors))]=(-1*($x/$i)); 
        $factors[(count($factors))]=($i); 
        $factors[(count($factors))]=($x/$i); 
        $factors[(count($factors))]=(-1*$i); 
       } else { 
        $factors[(count($factors))]=($x/$i); 
        $factors[(count($factors))]=($i); 
       } 
      } 
     } //end for 
     echo '(' . implode(',', $factors). ')'; 
    } //end if $x == 0 
} 
factor(-4); 

$factors находится вне области видимости функции, кроме того, что вы не возвращались или вывода чего-либо. Увидев, как вы эхо (0,0) Я предположил, что вы хотели, чтобы это повторялось, например, (2,4,8) и т. Д. Что вы можете сделать с помощью implode ..