2017-01-16 13 views
1

Filling I arrayFinal ein mehrdimensionales Array füllen müssen, so dass es wie folgt aussieht:ein mehrdimensionales Array PHP

$arrayFinal = array(
    array('Number' => 1, 'isEven' => false, 'isPrime' => true), 
    array('Number' => 2, '' => , '' =>), ...and so on 
); 

Ziemlich einfach, aber das Array Füllung nicht, dann ist es irgendwie leer.

Hier ist der Code:

<?php 
$arr = array(1,2,3,4,5,6,7,8,9,10); 
$arrayFinal = array(); 
$isEven = false; 
$isPrime = false; 

function check($a){ 

foreach($a as $el){ 

    if($el % 2 == 0){ 
     print($el.' is even ,'); 
     $isEven = true; 
     print($isEven); 
    } 
    else{ 
     print($el." is odd ,"); 
     $isEven = false; 
     print($isEven); 
    } 

    $temp = IsPrime($el); 
    if ($temp==0){ 
     print(' not a Prime Number.<br />'); 
     $isPrime = true; 
     print($isPrime); 
    } 
    else{ 
     print(' a Prime Number.<br />'); 
     $isPrime = false; 
     print($isPrime); 
    } 
     $arrayFinal[] = array('Number' => $el, 'isEven' => $isEven, 'isPrime' => $isPrime); 
    } 
} 


function IsPrime($n){ 
for($x=2; $x < $n; $x++){ 
    if($n%$x ==0){ 
     return 0; 
    } 
} 
return 1; 
} 



check($arr); 

print_r($arrayFinal); 

?> 
+0

Es gibt ein Problem mit '$ arrayFinal [] = array ('Nummer' => $ el, 'isEven' => $ isEven, 'isPrime' => $ isPrime); 'So wie ich das verstehe, weil der Restcode in Ordnung ist, habe ich überprüft. $ arrayFinal ist anfänglich 'null', vielleicht ist das das Problem? –

+0

Sie haben mehrere Antworten auf Ihre Frage erhalten. Wenn einer von ihnen das Problem für Sie gelöst hat, markieren Sie es als akzeptierte Antwort. Wenn nicht, bitte Kommentar mit mehr Informationen, damit wir helfen können. – BizzyBob

Antwort

1

Ihre Funktionskontrolle ($ a) hat keine "Rückkehr";

+0

ja, aber das Hinzufügen 'Rückkehr' hilft immer noch nicht –

1

Ihr $arrayFinal wird tatsächlich ausgefüllt. Sie können dies sehen, indem Sie Ihre print_r($arrayFinal);-Anweisung als letzte Zeile in Ihrer Funktion hinzufügen. (nach der for-Schleife).

Das Problem ist, dass Sie hier ein Problem mit einem variablen Bereich haben. Sie haben im Wesentlichen zwei verschiedene Variablen mit dem gleichen Namen. Ihre Initialisierung von $arrayFinal außerhalb Ihrer Funktion ist tatsächlich eine andere Variable als die, die Sie innerhalb Ihrer Funktion verwenden. (Dies gilt auch für Ihre anderen Variablen $isEven und $isPrime)

Sie aktualisieren die Variable lokal auf die Funktion. Aber Sie tun nichts mit diesem Wert, bevor die Funktion endet.

Sie wählen könnten return dieser Wert durch die folgende als letzte Zeile in Ihrer Funktion hinzufügen:

return $arrayFinal; 

Dann könnten Sie es wie folgt verwendet werden:

$output = check($arr); 
print_r($output); 

Dann könnte man das entfernen $arrayFinal = array(); von der Spitze Ihres Codes.

komplette Code könnte etwa so aussehen:

$arr = array(1,2,3,4,5,6,7,8,9,10); 

$output = check($arr); 
print_r($output); 


function check($a){ 
    $isEven = false; 
    $isPrime = false; 
    $arrayFinal = Array(); 

    foreach($a as $el){ 

     if($el % 2 == 0){ 
      print($el.' is even ,'); 
      $isEven = true; 
      print($isEven); 
     } 
     else{ 
      print($el." is odd ,"); 
      $isEven = false; 
      print($isEven); 
     } 

     $temp = IsPrime($el); 
     if ($temp==0){ 
      print(' not a Prime Number.<br />'); 
      $isPrime = true; 
      print($isPrime); 
     } 
     else{ 
      print(' a Prime Number.<br />'); 
      $isPrime = false; 
      print($isPrime); 
     } 

     $arrayFinal[] = array('Number' => $el, 'isEven' => $isEven, 'isPrime' => $isPrime); 
    } 

    return $arrayFinal; 
} 

function IsPrime($n){ 
    for($x=2; $x < $n; $x++){ 
     if($n%$x ==0){ 
      return 0; 
     } 
    } 
    return 1; 
} 
1

hey @Shiroi Okami Sie einen Bereich Problem, weil in PHP haben, können Sie nicht Verwendung globale Variable oder ein Array innerhalb der Funktion oder umgekehrt in Ihrem Fall deklariert $ arrayFinal außerhalb der Funktion und $ arrayFinal innerhalb der Funktion, die als anderes Array behandelt werden, wenn Sie $ arrayFinal verwenden möchten, ist innerhalb der Funktion so einfach mit globalen innerhalb der Funktion wie folgt deklarieren:

global $ arrayFinal;

global ermöglichen es uns, die Variable oder ein Array außerhalb der Funktion zu verwenden

unten Code Versuchen wird es Ihr Problem

<?php 
$arr = array(1,2,3,4,5,6,7,8,9,10); 
$arrayFinal = array(); 
$isEven = false; 
$isPrime = false; 

function check($a){ 
$arr1 = array(); 
foreach($a as $el){ 

    if($el % 2 == 0){ 
     print($el.' is even ,'); 
     $isEven = true; 
     print($isEven); 
    } 
    else{ 
     print($el." is odd ,"); 
     $isEven = false; 
     print($isEven); 
    } 

    $temp = IsPrime($el); 
    if ($temp==0){ 
     print(' not a Prime Number.<br />'); 
     $isPrime = true; 
     print($isPrime); 
    } 
    else{ 
     print(' a Prime Number.<br />'); 
     $isPrime = false; 
     print($isPrime); 
    } 
     global $arrayFinal; 
     $arrayFinal[] = array('Number' => $el, 'isEven' => $isEven, 'isPrime' => $isPrime); 
    } 
} 


function IsPrime($n){ 
for($x=2; $x < $n; $x++){ 
    if($n%$x ==0){ 
     return 0; 
    } 
} 
return 1; 
} 



check($arr); 

print_r($arrayFinal); 

?> 
+0

das hat nicht geholfen, das Array ist immer noch leer –

1

Kopieren fügen Sie diesen Code beheben,

<?php 
$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
$arrayFinal = array(); 
$isEven = false; 
$isPrime = false; 

function check($a) { 

    foreach ($a as $el) { 

     if ($el % 2 == 0) { 
      print($el . ' is even ,'); 
      $isEven = true; 
      print($isEven); 
     } else { 
      print($el . " is odd ,"); 
      $isEven = false; 
      print($isEven); 
     } 

     $temp = IsPrime($el); 
     if ($temp == 0) { 
      print(' not a Prime Number.<br />'); 
      $isPrime = true; 
      print($isPrime); 
     } else { 
      print(' a Prime Number.<br />'); 
      $isPrime = false; 
      print($isPrime); 
     } 
     $arrayFinal[] = array('Number' => $el, 'isEven' => $isEven, 'isPrime' => $isPrime); 
    } 
    return $arrayFinal; // I added this line 
} 
function IsPrime($n) { 
    for ($x = 2; $x < $n; $x++) { 
     if ($n % $x == 0) { 
      return 0; 
     } 
    } 
    return 1; 
} 
check($arr); 
print_r($arrayFinal); 
?> 

Ihr alles ist in Ordnung. Sie müssen nur zurückgeben, was Sie manipuliert haben.

+0

das Array ist immer noch irgendwie leer. –