2016-07-31 27 views
0

Wie erstelle ich eine globale Variable wie preg_match für den Parameter $matches?Erstellen Sie eine globale Variable, wenn das Argument bereitgestellt wird

Im folgenden Code erstellt preg_match globale $Hel_matches und $Wor_matches Variablen, obwohl sie nicht definiert sind.

$string = "Hello, World!"; 

$pattern1 = '/Hel/'; 
$pattern2 = '/Wor/'; 

preg_match($pattern1, $string, $Hel_matches); 
preg_match($pattern2, $string, $Wor_matches); 

print_r($Hel_matches); 
print_r($Wor_matches); 

Ich möchte in der Lage sein, das Gleiche zu tun. Beispiel: odd_numbers() gibt ein Array zurück, das mit den ungeraden Zahlen zwischen 0 und $max gefüllt ist.

function odd_numbers($max) { 
    $numbers = []; 
    for ($i = 0; $i <= $max; $i++) { 
     if ($i % 2 == 1) { 
      $numbers[] = $i; 
     } 
    } 
    return $numbers; 
} 

$odd_numbers = odd_numbers(10); 
print_r($odd_numbers); 

Wenn ich einige zusätzliche Berechnung im odd_numbers() tun will und zurück auch, dass (für Debug-Zwecke, zum Beispiel), na ja, ich kann nicht. Ich kann nur eine Sache zurückgeben. Stattdessen übergebe ich ein zweites Argument (Variable) an die odd_numbers() und die Funktion gibt/gibt den Rückgabewert an diese Variable zurück.

// $odd_numbers = odd_numbers(10, $evens); // fill $evens (if provided) with even numbers for debug purposes 
print_r($odd_numbers); 
// print_r($evens); // debug 

Antwort

1

können Sie einen reference verwenden, indem Sie die Variable mit & prefixing:

function odd_numbers($max, &$evens = array()) { 
    // blah 
    $numbers = array(1, 3, 5); 

    if (func_num_args() == 2) { 
     $evens = array(2, 4, 6); 
    } 

    return $numbers; 
} 

$odd_numbers = odd_numbers(10, $evens); 
var_dump($evens); 

Ausgang:

array (size=3) 
    0 => int 2 
    1 => int 4 
    2 => int 6 
+0

Wie kann ich überprüfen, ob '$ evens' vorgesehen ist oder nicht? 'odd_numbers' kann mit oder ohne' $ evens' aufgerufen werden. – akinuri

+0

Sie können http://php.net/manual/en/function.func-num-args.php verwenden - ich werde die Antwort mit einem Beispiel aktualisieren – rjdown

+0

Okay, dies scheint den Trick zu tun. – akinuri