PHP函数返回数组


77

我需要从一个函数返回多个值,因此我已将它们添加到数组中并返回了该数组。

<?

function data(){

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

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


?>

我怎么能接受的价值观$a$b$c通过调用上述功能?


3
您可以像访问任何数组一样访问这些值。我建议阅读php.net/manual/en/language.types.array.php
Felix Kling

Answers:


106

您可以将数组键添加到返回值,然后使用这些键打印数组值,如下所示:

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

你可以这样做:

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

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

@GiacomoTecyaPigani列表不是一个函数,而是docs中所述的一种语言构造。
塔兰2014年

对于习惯使用Python的元组解压缩或C ++ 17的结构化绑定的人来说,这似乎是迄今为止返回多个值的最自然的方法。
s3cur3


14

数据函数返回一个数组,因此您可以使用与通常访问数组元素相同的方式来访问函数的结果:

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

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

或者,您可以使用list()@fredrik建议的功能在一行中执行相同的操作。



5

从PHP 5.4开始,您可以利用数组解引用并执行以下操作:

<?

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
注意:您可能不想对函数进行3次评估!
瑞克·詹姆斯

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

这是类似功能的最佳方法

 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;
}  

你会得到这样的数组数据

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

2

为了获得每个变量的值,您需要像对待数组一样对待函数:

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

也许这就是您搜索的内容:

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

1

这是我在yii framewok内部所做的:

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

然后在我的视图文件中:

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

我正在做的是抓住我选择的桌子的一个克雷汀部分。应该只为PHP工作,减去数据库的“ Yii”方式


1

正如Felix Kling在第一个响应中指出的那样,潜在的问题围绕着访问数组中的数据。

在下面的代码中,我已经使用print和echo构造访问了数组的值。

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();


0

我认为最好的方法是创建一个全局var数组。然后,通过将其作为参考传递给函数数据,以对其进行任何处理。也不需要返回任何东西。

$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

您的功能是:

function data(){

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

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

它返回一个数组,其中位置0是$ a,位置1是$ b,位置2是$ c。因此,您可以通过执行以下操作来访问$ a:

数据()[0]

如果执行$ myvar = data()[0]并打印$ myvar,则会得到“ abc”,这是在函数内部分配给$ a的值。


0

我一直在寻找比我正在使用的更简单的方法,但本文未对此进行解答。但是,我的方法有效,并且我不使用任何上述方法:

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

我的功能没有问题。我循环读取数据以显示我的关联数据。我不知道为什么有人会建议上述方法。如果您希望将多个数组存储在一个文件中,但没有全部加载,请使用上面的我的function方法。否则,所有阵列都将加载到页面上,从而减慢您的网站速度。我想出了这段代码,将所有数组存储在一个文件中,并在需要时使用单个数组。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.