Як отримати доступ до елементів масиву повернення функції?


78

Мені потрібно повернути декілька значень із функції, тому я додав їх у масив і повернув масив.

<?
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 .
Фелікс Клінг,

Ефективно дублікат stackoverflow.com/q/5301065/2943403
mickmackusa

Відповіді:


110

Ви можете додати ключі масиву до своїх повернутих значень, а потім використовувати ці ключі для друку значень масиву, як показано тут:

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

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

59

Ви можете зробити це:

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

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

Список @GiacomoTecyaPigani не є функцією, це мовна конструкція, як зазначено в документах .
Тайлан

Для когось, хто звик до розпакування кортежів Python або структурованих прив’язок C ++ 17, це здається найбільш природним способом повернення декількох значень.
s3cur3

Мило і просто
розробник PHP


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"
?>

11
Увага: можливо, ви не захочете оцінювати функцію 3 рази!
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

ось найкращий спосіб у подібній функції

 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:

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" для db


1

Основна проблема пов'язана з доступом до даних у масиві, як зазначає Фелікс Клінг у першій відповіді.

У наступному коді я отримав доступ до значень масиву за допомогою конструкцій 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

Я думаю, що найкращий спосіб це зробити - створити глобальний масив змінних. Потім виконуйте все, що завгодно, всередині даних функції, передаючи їх як посилання. Не потрібно теж щось повертати.

$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 MyFunction() {
  $lookyHere = array(
    'value1' => array('valuehere'),
    'entry2' => array('valuehere')
  );
  return $lookyHere;
}

У мене немає проблем з моєю функцією. Я читаю дані у циклі для відображення пов’язаних даних. Я не уявляю, чому хтось запропонує вищезазначені методи. Якщо ви хочете зберегти кілька масивів в одному файлі, але не всі з них завантажені, то скористайтеся моїм методом функції вище. В іншому випадку всі масиви завантажаться на сторінку, тим самим сповільнюючи роботу вашого сайту. Я придумав цей код, щоб зберігати всі мої масиви в одному файлі та використовувати окремі масиви, коли це потрібно.


Чому хто-небудь повинен оголошувати змінну одноразового використання. Я б не використовував цю відповідь. Ваш зразок відхиляється від даних OP. Є вагомі причини не оголошувати асоціативний масив, але критерії сильно залежать від того, що буде зроблено з повернутими даними. До речі, ваша функція ВЖЕ завантажує / заповнює всі масиви.
mickmackusa

-1

Ваша функція:

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 всередині функції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.