Quantcast
Viewing all articles
Browse latest Browse all 757

10: 通常配列と連想配列との混在,

通常配列と連想配列との混在 そもそも通常配列と連想配列との区別はないので、これらを混在させることも可能。 例 <?php $data = [‘山田’ => ‘太郎’, 15 => ‘二郎’, ‘鈴木’ => ‘三郎’, ‘四郎’]; print_r($data); //結果: Array ( [山田] => 太郎 [15] => 次郎 [鈴木] => 三郎 [16] => 次郎 ) この場合も、キーを省略した場合には、「その時点での最大インデックス+1」が次のインデックスとして割り振られる。 キーは整数値/文字列に変換される ここまではキーとして整数、または文字列を指定してきたが、そのほかにも、任意のデータ型を指定できる。 下記例 ただし、整数/文字列以外のキーが指定された場合には、内部的に、整数/文字列に変換される。 <?php $data = [ ‘str’ => 0, ‘7’ => 1, ‘07’ => 2, 10.5 => 3, true => 4, null => 5, ]; print_r($data); //結果: Array ( [str] => 0 [7] => 1 [07] => 2 [10] => 3 [1] => 4 [] => 5 ) 変換のルールは以下のとおり。 ①整数値として正しい形式の文字列はそのまま整数値に変換される。ただし、「07」のように10進数として妥当でない値はそのまま文字列となる。 ②小数点数は切り捨てられる(四捨五入ではない) ③true/false値は、それぞれ1/0に変換される ④null値はから文字列に変換される ちなみに、配列やオブジェクトを、配列のキーとすることはできない。 エラーとなるので注意。 型の相互変換 前回も述べたように、PHPはデータ型に関して比較的寛容な言語。 データの中身から自動的に判断し、適切な入れ物(変数)を割り当ててくれるのがPHPの良いところ。 しかしそのために、ある程度本格的なコードを書き始めると、思わぬ挙動に悩まされることもある。 ここでは、データ型の暗黙的な変換と、明示的な変換(キャスト)について学ぶ。 暗黙的な変換 PHPでは、そのときどきの状況に応じて値を適切なデータ型へ変換することで、「それぞれの文脈に応じてできるだけ何らかの処理をしよう」とする。 これを型の暗黙的な変換という。 たとえば前回の「数値や文字列を論理型とみなす」などの処理は典型的な暗黙的な変換であり、PHPの世界ではこのような処理が(特に演算の局面で)常時行われている。 ただし時としてその変換は明確でないことから混乱の元にもなる。 明示的な変換(キャスト) 厳密な比較や演算をしたい場合、暗黙的な変換に頼るのは必ずしも好ましくない。 そのような場合には、キャストと言う仕組みを利用することで、値を特定の型に強制的に変換できる。 構文キャスト (データ型)値 キャスト構文で利用できるデータ型は下記のとおり。 利用可能なキャスト型 データ型 概要 (int)、(integer) 整数型へのキャスト (bool)、(boolean) 論理型へのキャスト (float)、(double) 浮動小数点型へのキャスト (string) 文字列型へのキャスト (binary) バイナリ文字列型へのキャスト (array) 配列へのキャスト (object) オブジェクトへのキャスト 下記は具体例 具体例に使われるvar_dumpは、変数(値)の情報を出力する関数。 print_r関数に似ているが、データ型も加味した情報を出力してくれるので、型も含めて値を確認したい場合に便利。 <?php var_dump((int)1530.95); ①//結果: int(1530) var_dump((int)-1530.95); ②//結果: int(-1530) var_dump((int)true); ③//結果: int(1) var_dump((string)true); ④//結果: string(1)”1” var_dump((int)false); ⑤//結果: int(0) var_dump((string)false); ⑥//結果: string(0)”” var_dump((array)108); ⑦//結果: array(1){[0] => int(108)} ①と②は浮動小数点数リテラルを整数型にキャストする例。 この場合、値は四捨五入ではなくゼロの方向に丸められる。 ③〜⑥は論理リテラルを数値や文字列にキャストしている。 この場合、trueは1に変換され、falseは0または空文字列に変換される。 ⑦はスカラー型から配列型への変換。 この場合、数値/文字列/論理型のいずれであっても、要素をひとつだけ持つ配列ができあがる。 数値を文字列に変換する特殊な方法として、変数をダブルクォートでくくってもかまわない。 ダブルクォートのなかで変数が展開され、その結果は文字列とみなされる。 $x = 1; var_dump(“$x”); //結果: string(1)”1” 文字列→数値の型キャスト 文字列から数値にキャスト処理を行う場合、注意すべき点がある。 具体例 <?php var_dump((int)’0b11’); ①//結果: int(0) var_dump((int)’0777’); ①//結果: int(777) var_dump((int)’0xFF’); ①//結果: int(0) var_dump(bindec(‘0b11’)); ②//結果: int(3) var_dump(octdec(‘0777’)); ②//結果: int(511) var_dump(hexdec(‘0xFF’)); ②//結果: int(255) var_dump((int)’1E4’); ③//結果: int(10000) var_dump((floot)’1E4’); ③//結果: floot(10000) ①のように’0b11’(2進数)や’0777’(8進数)、’0xFF’(16進数)をキャストした場合、いずれも正しく認識されず、先頭から数字として認識できる箇所までを抜き出す。 よって’0b11’であれば「b」の前までを抜き出し、0となる。 ‘0777’は全て数字だが、10進数と認識され、結果は777となる。 これら2/8/16進数表現の文字列を正しくキャストするには、②のような関数を利用する。 関数 概要 bindec 2進数を10進数に変換 octdec 8進数を10進数に変換 hexdec 16進数を10進数に変換 残る指数表現については問題ない(③)。 int/floatがた共に正しく認識できる。 11は演算子について

Viewing all articles
Browse latest Browse all 757

Trending Articles