ホームページ  >  記事  >  バックエンド開発  >  配列の小さな問題

配列の小さな問題

WBOY
WBOYオリジナル
2016-06-20 12:37:38879ブラウズ

<?php$roomlist=array('0'=>array('id' => '11'),'1'=>array('id' => '22'),);$rand_keys = array_rand($roomlist, 1);var_dump($rand_keys);echo gettype($rand_keys);echo ("\n");echo ("\n");$rand_keys = array_rand($roomlist, 2);var_dump($rand_keys);echo gettype($rand_keys);?>


出力は次のとおりです:
int(0)
integer

array(2) {
[0]=> int (0)
[1]=>
int(1)
}
array

最初のテストのための小さな質問、array_rand($roomlist, 1) ; 配列ではなく整数を返すのはなぜですか?


ディスカッションへの返信 (解決策)

array_rand( ) 関数は、配列内のランダム キーを返します。関数が複数のキーを返すように指定した場合は、ランダム キーを含む配列を返します。

キーを返すだけのようです

array_rand() 関数は配列内のランダムなキー名を返します。または、関数が複数のキー名を返すように指定した場合、ランダムなキー名を返します。


私が混乱しているのは、array_rand の 2 番目のパラメーターが 1 の場合、配列ではなく整数を返すのはなぜなのかです。

このように使用すると、バグ
<?php$roomlist=array('0'=>array('id' => '11'),);$array_size = count($roomlist)$rand_keys = array_rand($roomlist, $array_size);   //size为1时,返回为integer,size>=2时,返回的是array,下面的操作无法统一var_dump($rand_keys);echo gettype($rand_keys);echo ("\n");echo ("\n"); $val = $roomlist[$rand_keys[0]];

見ましたか? ? $rand_keys が整数の場合はバグがあるため、

はキーを返すだけのようです。 C++ では、返される配列は配列です。 return integer 返されるのは整数であり、関数のパラメータが変化しても変化しません。 。

不一致には特別な処理が必要です。 。そして、それは不合理です、1 つの関数には 2 つの戻り値の型があります。 。 。私のテストを参照してください。

定義と使用法
array_rand() 関数は、配列内のランダム キーを返します。関数が複数のキーを返すように指定した場合は、ランダム キーを含む配列を返します。
説明 array_rand() 関数は、配列から 1 つ以上の要素をランダムに選択し、それを返します。

2 番目のパラメータは、選択する要素の数を決定するために使用されます。複数の要素が選択された場合は、ランダムなキーを含む配列が返され、それ以外の場合は要素のキーが返されます。

マニュアルが理解できない場合、またはマニュアルの説明に疑問がある場合。そうなると、神々も助けてはくれない

マニュアルには明確に書かれています:
------
戻り値:

1 つだけを取り出す場合、array_rand( ) ランダムなセル キーを返します。それ以外の場合は、ランダム キーを含む配列が返されます。このようにして、配列からキーと値をランダムに取り出すことができます。



バグはバグです。 。

スクリプト言語は素晴らしいです。 。 。 。 。ラララララララララ

C++ の人は理解できません、理解できません ララララ

上の階の答えに加えて、わかりませんか私は初心者なので、正しく/適切な説明が得られない場合は投稿しません。 。 。 。 。 。 。 。 。 。



公式 Web サイトに記載されている内容を見つけました

http://php.net/manual/zh/function.array-rand.php

後ほど 私のような初心者向けに、これは php の公式マニュアルです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。