2016-12-08 17 views
1

私は次のコードを持っている:二つの配列 - PHP

$lines; 
$invalidNumber = []; 
$validNumber = []; 

    function readCSV($thefile) { 
     $i = 0; 
     $file = fopen($thefile, 'r'); 

     // Put numbers from CSV into array 
     while (($line = fgetcsv($file)) !== FALSE) { 
      // Write lines to array 
      $lines[$i] = $line; 
      $i++; 
     } 

     fclose($file); 

     validateNumbers($lines); 
    } 


    // Go through array sorting numbers into invalidNumber and validnumbers 
    function validateNumbers($lines) { 
    // Valid numbers togo to reuqests and invalid to csvFile to be displayed seperately 
     $validNumber = []; 
     $invalidNumber = []; 

     for ($i = 0; $i < count($lines); ++$i) { 
      echo "</br>"; 
      $number[$i] = $lines[$i][0]; 
      echo $number[$i] . " length: " . strlen($number[$i]); 

      /* 
      switch on length of number: , , 

      */ 
      switch (strlen($number[$i])) { 
       case 10: 
        if (substr($number[$i], 0, -9) != 7) { 
         $inc = count($invalidNumber); 
         $invalidNumber[$inc++] = $number[$i]; 
        } else { 
         $vnc = count($validNumber); 
         $validNumber[$vnc++] = $number[$i]; 
        } 
        break; 
       case 11: 
         switch (substr($number[$i], 0, -9)) { 
          case 07: 
          $vnc = count($validNumber); 
          $validNumber[$vnc++] = $number[$i]; 
          break; 
          default: 
          $inc = count($invalidNumber); 
          $invalidNumber[$inc++] = $number[$i]; 
         break; 
        } 
        break; 
       case 12: 
        switch (substr($number[$i], 0, -9)) { 
         case 447: 
         $vnc = count($validNumber); 
         $validNumber[$vnc++] = $number[$i]; 
         break; 
         case '077': 
         $vnc = count($validNumber); 
         $validNumber[$vnc++] = $number[$i]; 
         break; 
         default: 
         $inc = count($invalidNumber); 
         $invalidNumber[$inc++] = $number[$i]; 
         break; 
        } 
        break; 
       case 13: 
        switch (substr($number[$i], 0, -9)) { 
          case '+447': 
          $vnc = count($validNumber); 
          $validNumber[$vnc++] = $number[$i]; 
          break; 
          default: 
          $inc = count($invalidNumber); 
          $invalidNumber[$inc++] = $number[$i]; 
          break; 
         } 
        break; 
       default: 
        // if number is not 10, 11, 12 or 13 charaters long if < 10 (SKIP), if = 10 & charAt 1 != 7 (invalid) 
        echo "Invalid Number"; 
        break; 

      } 
     } 
    } 

を私がする機能のうち、配列$ validNumberと$ invalidNumberに合格したいと思います私がページの一番上に宣言している配列は、どうしようもしないようです。

+0

だけhttp://php.net/manual/en/language.variables.scope.php(あなたは、[変数のスコープ]で調べる必要があり、無効と有効 – Ghost

+1

の配列の 'return'値を使用します)しかし** ** 'global'を使わないでください – RiggsFolly

+0

関数の参照パラメータを使用して、関数によって変更される配列を渡すことができます。 – arkascha

答えて

1

まず、あなたはまた、&参照演算子を使用している場合

は、さてあなたはその配列のコピーを元の配列への参照を渡すとされていないIN-SCOPEそれらを作る、パラメータとして関数に配列を渡しますこれらの両方の機能。だから、あなたが何をするのかは、アレイのコピーではなく、アレイ自体に行われます。

function readCSV($thefile, &$invalidNumber, &$validNumber, &$lines) { 
    $i = 0; 
    $file = fopen($thefile, 'r'); 

    // Put numbers from CSV into array 
    while (($line = fgetcsv($file)) !== FALSE) { 
     // Write lines to array 
     $lines[$i] = $line; 
     $i++; 
    } 

    fclose($file); 

    validateNumbers(&$lines, $invalidNumber, $validNumber); 
} 


// Go through array sorting numbers into invalidNumber and validnumbers 
function validateNumbers($lines, &$invalidNumber, &$validNumber, &$lines) { 
    // Valid numbers togo to reuqests and 
    // invalid to csvFile to be displayed seperately 


    for ($i = 0; $i < count($lines); ++$i) { 
     echo "</br>"; 
     $number[$i] = $lines[$i][0]; 
     echo $number[$i] . " length: " . strlen($number[$i]); 

     /* 
     switch on length of number: , , 

     */ 
     switch (strlen($number[$i])) { 
      case 10: 
       if (substr($number[$i], 0, -9) != 7) { 
        $inc = count($invalidNumber); 
        $invalidNumber[$inc++] = $number[$i]; 
       } else { 
        $vnc = count($validNumber); 
        $validNumber[$vnc++] = $number[$i]; 
       } 
       break; 
      case 11: 
        switch (substr($number[$i], 0, -9)) { 
        case 07: 
         $vnc = count($validNumber); 
         $validNumber[$vnc++] = $number[$i]; 
         break; 
        default: 
         $inc = count($invalidNumber); 
         $invalidNumber[$inc++] = $number[$i]; 
         break; 
       } 
       break; 
      case 12: 
       switch (substr($number[$i], 0, -9)) { 
        case 447: 
         $vnc = count($validNumber); 
         $validNumber[$vnc++] = $number[$i]; 
         break; 
        case '077': 
         $vnc = count($validNumber); 
         $validNumber[$vnc++] = $number[$i]; 
         break; 
        default: 
         $inc = count($invalidNumber); 
         $invalidNumber[$inc++] = $number[$i]; 
         break; 
       } 
       break; 
      case 13: 
       switch (substr($number[$i], 0, -9)) { 
       case '+447': 
        $vnc = count($validNumber); 
        $validNumber[$vnc++] = $number[$i]; 
        break; 
       default: 
        $inc = count($invalidNumber); 
        $invalidNumber[$inc++] = $number[$i]; 
        break; 
       } 
       break; 
      default: 
       // if number is not 10, 11, 12 or 13 charaters long if < 10 (SKIP), if = 10 & charAt 1 != 7 (invalid) 
       echo "Invalid Number"; 
       break; 

     } 
    } 
} 

$lines = []; 
$invalidNumber = []; 
$validNumber = []; 

readCSV('the_file_name', $invalidNumber, $validNumber, $lines); 
+0

私はvalidateNumber($ lines)がupload.phpから呼び出され、ファイルの場所を渡していることを忘れていました。内容を知っていないので、関数の呼び出しに追加する内容はわかりません。 –

+0

それでは、あなたは ''the_file_name''をあなたが使っているものに修正しなければなりません。 – RiggsFolly

+0

upload.phpページからvalidateNumber($ lines)を呼んでから、$ $& &$ validNumberはProccessArray.phpページの変数から来ています –