PHP-Funktionsrückgabearray


77

Ich muss mehrere Werte von einer Funktion zurückgeben, daher habe ich sie einem Array hinzugefügt und das Array zurückgegeben.

<?

function data(){

$a = "abc";
$b = "def";
$c = "ghi";

return array($a, $b, $c);
}


?>

Wie kann ich die Werte erhalten $a, $b, $cdurch die obige Funktion aufrufen?


3
Sie können auf die Werte zugreifen, während Sie auf ein beliebiges Array zugreifen. Ich schlage vor, php.net/manual/en/language.types.array.php zu lesen .
Felix Kling

Antworten:


105

Sie können Ihren Rückgabewerten Array-Schlüssel hinzufügen und diese Schlüssel dann verwenden, um die Array-Werte zu drucken, wie hier gezeigt:

function data() {
    $out['a'] = "abc";
    $out['b'] = "def";
    $out['c'] = "ghi";
    return $out;
}

$data = data();
echo $data['a'];
echo $data['b'];
echo $data['c'];

58

du kannst das:

list($a, $b, $c) = data();

print "$a $b $c"; // "abc def ghi"

Die @ GiacomoTecyaPigani-Liste ist keine Funktion, sondern ein Sprachkonstrukt, wie in den Dokumenten angegeben .
Taylan

Für jemanden, der an das Entpacken von Python-Tupeln oder an die strukturierten Bindungen von C ++ 17 gewöhnt ist, scheint dies bei weitem der natürlichste Weg zu sein, mehrere Werte zurückzugeben.
s3cur3


14

Die Datenfunktion gibt ein Array zurück, sodass Sie auf das Ergebnis der Funktion genauso zugreifen können, wie Sie normalerweise auf Elemente eines Arrays zugreifen würden:

<?php
...
$result = data();

$a = $result[0];
$b = $result[1];
$c = $result[2];

Oder Sie können die list()Funktion verwenden, wie von @fredrik empfohlen, um dasselbe in einer Zeile zu tun.



5

Ab PHP 5.4 können Sie die Array-Dereferenzierung nutzen und Folgendes tun:

<?

function data()
{
    $retr_arr["a"] = "abc";
    $retr_arr["b"] = "def";
    $retr_arr["c"] = "ghi";

    return $retr_arr;
}

$a = data()["a"];    //$a = "abc"
$b = data()["b"];    //$b = "def"
$c = data()["c"];    //$c = "ghi"
?>

10
Achtung: Möglicherweise möchten Sie die Funktion nicht dreimal bewerten!
Rick James

4
<?php
function demo($val,$val1){
    return $arr=array("value"=>$val,"value1"=>$val1);

}
$arr_rec=demo(25,30);
echo $arr_rec["value"];
echo $arr_rec["value1"];
?>

2

Hier ist der beste Weg in einer ähnlichen Funktion

 function cart_stats($cart_id){

$sql = "select sum(price) sum_bids, count(*) total_bids from carts_bids where cart_id = '$cart_id'";
$rs = mysql_query($sql);
$row = mysql_fetch_object($rs);
$total_bids = $row->total_bids;
$sum_bids = $row->sum_bids;
$avarage = $sum_bids/$total_bids;

 $array["total_bids"] = "$total_bids";
 $array["avarage"] = " $avarage";

 return $array;
}  

und Sie erhalten die Array-Daten wie folgt

$data = cart_stats($_GET['id']); 
<?=$data['total_bids']?>

2

Um die Werte jeder Variablen zu erhalten, müssen Sie die Funktion wie ein Array behandeln:

function data() {
    $a = "abc";
    $b = "def";
    $c = "ghi";
    return array($a, $b, $c);
}

// Assign a variable to the array; 
// I selected $dataArray (could be any name).

$dataArray = data();
list($a, $b, $c) = $dataArray;
echo $a . " ". $b . " " . $c;

//if you just need 1 variable out of 3;
list(, $b, ) = $dataArray;
echo $b;

2

Vielleicht haben Sie danach gesucht:

function data() {
    // your code
    return $array; 
}
$var = data(); 
foreach($var as $value) {
    echo $value; 
}

1

Das habe ich im yii-Framewok gemacht:

public function servicesQuery($section){
        $data = Yii::app()->db->createCommand()
                ->select('*')
                ->from('services')
                ->where("section='$section'")
                ->queryAll();   
        return $data;
    }

dann in meiner Ansichtsdatei:

      <?php $consultation = $this->servicesQuery("consultation"); ?> ?>
      <?php foreach($consultation as $consul): ?>
             <span class="text-1"><?php echo $consul['content']; ?></span>
       <?php endforeach;?>

Was ich mache, um einen Kretin-Teil der Tabelle zu greifen, die ich ausgewählt habe. sollte für nur PHP minus dem "Yii" Weg für die Datenbank funktionieren


1

Das zugrunde liegende Problem besteht darin, auf die Daten innerhalb des Arrays zuzugreifen, wie Felix Kling in der ersten Antwort hervorhebt.

Im folgenden Code habe ich mit den Konstrukten print und echo auf die Werte des Arrays zugegriffen.

function data()
{

    $a = "abc";
    $b = "def";
    $c = "ghi";

    $array = array($a, $b, $c);

    print_r($array);//outputs the key/value pair

    echo "<br>";

    echo $array[0].$array[1].$array[2];//outputs a concatenation of the values

}

data();

1
$data = data(); 
$a = $data[0];
$b = $data[1];
$c = $data[2];

0

Ich denke, der beste Weg, dies zu tun, besteht darin, ein globales var-Array zu erstellen. Machen Sie dann innerhalb der Funktionsdaten, was Sie wollen, indem Sie es als Referenz übergeben. Sie müssen auch nichts zurückgeben.

$array = array("white", "black", "yellow");
echo $array[0]; //this echo white
data($array);

function data(&$passArray){ //<<notice &
    $passArray[0] = "orange"; 
}
echo $array[0]; //this now echo orange

0

Ihre Funktion ist:

function data(){

$a = "abc";
$b = "def";
$c = "ghi";

return array($a, $b, $c);
}

Es gibt ein Array zurück, in dem Position 0 $ a, Position 1 $ b und Position 2 $ c ist. Sie können daher auf $ a zugreifen, indem Sie genau Folgendes tun:

data () [0]

Wenn Sie $ myvar = data () [0] ausführen und $ myvar drucken, erhalten Sie "abc", den Wert, der $ a innerhalb der Funktion zugewiesen wurde.


0

Ich habe nach einer einfacheren Methode gesucht als ich, aber sie wird in diesem Beitrag nicht beantwortet. Meine Methode funktioniert jedoch und ich verwende keine der oben genannten Methoden:

function MyFunction() {
  $lookyHere = array(
    'value1' => array('valuehere'),
    'entry2' => array('valuehere')
  );
  return $lookyHere;
}

Ich habe keine Probleme mit meiner Funktion. Ich lese die Daten in einer Schleife, um meine zugehörigen Daten anzuzeigen. Ich habe keine Ahnung, warum jemand die oben genannten Methoden vorschlagen würde. Wenn Sie mehrere Arrays in einer Datei speichern möchten, aber nicht alle geladen haben, verwenden Sie die oben beschriebene Funktionsmethode. Andernfalls werden alle Arrays auf der Seite geladen, wodurch Ihre Site verlangsamt wird. Ich habe mir diesen Code ausgedacht, um alle meine Arrays in einer Datei zu speichern und bei Bedarf einzelne Arrays zu verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.