アプリ版:「スタンプのみでお礼する」機能のリリースについて

関数で、例えば配列型を返す関数oshiete()があるとします。
これを個別の関数に割り当てる場合は以下のようになります。

list($var1, $var2, $var3) = oshiete();

あるいは

$vars = oshiete();
$var1 = $vars[0];
$var2 = $vars[1];
$var3 = $vars[2];

もし返ってくる配列中の値のうち、1つだけ取り出したい場合は以下のようになります。

$var1 = oshiete();
$var1 = $var1[0];

しかし、ここで2行書くのが無駄に思えて仕方がありません。
1行目の「$arr = 」に続けて、関数oshiete()の値を1つだけ取り出す方法って無いのでしょうか?「$arr = oshiete()[0];」のような書き方は駄目でした。

あと、もし2行で書く方法し無い場合、関数oshiete()が1つの値を取り出すことだけが目的で、かつそれ以降使うことが無い場合、配列を一旦変数$var1に入れて次にその変数に上書きする形で値を代入する方法は、メモリ消費量などの観点から見ると有用でしょうか?他で使わないなら別の変数名を容易するのは無駄に思えます。

A 回答 (2件)

以下の方法でどうでしょう?


参考URLもご確認ください

<?

function func()
{
  return array(1, 2, 3);
}

//1番目のみ
list($a) = func();
print $a;


//2番目のみ
list(, $b) = func();
print $b;


//3番目のみ
list(, , $c) = func();
print $c;


?>

参考URL:http://jp.php.net/list
    • good
    • 0

ご存知かもしれませんが,


最初の一つのみ取り出したいなら
$var_first = array_shift(oshiete());
最後の一つのみ取り出したいなら
$var_last = array_pop(oshiete());
のような方法があります。
他にもPHPには配列を操作する便利な関数がたくさんあるので目を通してみてください。

疑問に思ったのですが,本当に関数の戻り値は配列でなければいけないんでしょうか?
例えばoshiete()関数の引数に何番目の値が欲しいか渡し,引数が省略された場合は配列を返すようにすれば
$var1 = oshiete(1);
$vars = oshiete();
と言う感じに丸く収まりそうですけど。

参考URL:http://php.benscom.com/manual/ja/ref.array.php
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!