PHPでは配列を受け取らず、中身を展開した状態しか受け取らない関数が存在します。pack関数はバイナリを弄るときに使用する関数ですが、例えば1バイトの値が1024個入った配列をバイナリにしたいとき、 pack("C*", $array); と書いても正しく動作しません。 正しくは pack("C*", ...$array); このように書き、引数の配列をアンパッキングします。 この書き方を行うと、 $array=[0,1,2,3,続く]; のとき pack("C*", 0, 1, 2, 3, 続く); を実行したときと同じ挙動となります。 このように配列を展開したいという場合は意外と多いので、ぜひ覚えておきましょう。 ご覧いただきありがとうございました。
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
PHPとPythonとRubyの連想配列のデータ構造がそれぞれ4〜5年ほど前に見直され、ベンチマークテストによっては倍以上速くなったということがありました。具体的には以下のバージョンで実装の大変更がありました。 PHP 7.0.0 HashTable高速化 (2015/11) Python 3.6.0 dictobject高速化 (2016/12) Ruby 2.4.0 st_table高速化 (2016/12) これらのデータ構造はユーザーの利用する連想配列だけでなく言語のコアでも利用されているので、言語全体の性能改善に貢献しています1。 スクリプト言語3つが同時期に同じデータ構造の改善に取り組んだだけでも面白い現象ですが、さらに面白いことに各実装の方針は非常に似ています。独立に改善に取り組んだのに同じ結論に至ったとすれば興味深い偶然と言えるでしょう2。 本稿では3言語の連想配列の従来実
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
json_encode()でPHPの配列をJSONにする場合に、PHPの配列の内容によってJSONの配列(Array)になるかハッシュ(JSONの場合KEYが文字列のプロパティの集合)になるかを調べてみた。 PHPの連想配列(KEYあり)の場合 $arr = array('foo' => 'a', 'bar' => 'b', 'baz' => 'c'); echo json_encode($arr); // => {"foo":"a","bar":"b","baz":"c"} →JSONのハッシュになった。 PHPの配列(KEY指定なし=ゼロから始まる連番)の場合 $arr = array('a', 'b', 'c'); echo json_encode($arr); // => ["a","b","c"] →JSONの配列になった。 PHPの配列を、json_encode()のオプション
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
今までPHPでは配列を書くのにarray()という記法を使う必要があったが、PHP5.4のリポジトリに新しい配列の文法が追加された。[]で囲むことで配列を表現することができるようになっている。連想配列についても同様。 add short array syntax as defined in https://wiki.php.net/rfc/shortsyntaxforarrays, 2nd solution using => only http://svn.php.net/viewvc?view=revision&revision=313641 以下、配列の新しい文法に関するテストケースを引用。 --TEST-- Testing array shortcut and bracket operator --FILE-- <?php $a = [1, 2, 3, 4, 5]; print_r(
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
PHPにはlist表現というものがあるが、積極的に使われているのをあんまり見ない。 これはおそらくlistの以外な便利さが詳細まで知られていないからかと思う。 そこでこの記事ではPHPのlistの使い方を細かく説明していくことにする。 基本的な使い方 list表現は代入式の左辺で使われ、右辺の配列の要素を一連の変数に代入する事が出来る。 そのlistのごく基本的な使い方の例が以下。 <?php list($first, $second) = array(1, 2); 変数$firstに右辺の配列の0番目の要素が代入され、変数$secondに右辺の配列の1番目の要素が代入される。 listの外見は関数の呼び出しとほとんど変わらないので奇妙に見えるかもしれない。 上のコードは、以下とほぼ同じ意味を持つ。 <?php $arr = array(1,2); $first = $arr[0]; $s
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
PHP: array_walk - Manual array_walkはforeachに置き換えた方が圧倒的に可読性が良いと思う。 特に引数でそのまま無名関数を渡してしまう場合。 array_walk版 <?php $array = array(10,20,30,40,50); array_walk($array, function(&$i){ $i += 5; }); print_r($array); //Array //( // [0] => 15 // [1] => 25 // [2] => 35 // [3] => 45 // [4] => 55 //) foreach版 <?php $array = array(10,20,30,40,50); foreach ($array as &$i) { $i += 5; } print_r($array); //Array //( //
前書き @Hiraku さんの SplFixedArrayで"純粋な配列"を作る に感化されて衝動的に作ってしまった。 個人的により強く縛りたいと感じるのは、配列のサイズというよりは格納される 要素の型 なので。それならPHPなんか使うなって言われそうだけどまぁうんそうだねはい(適当) Collection ArrayObject を継承して作ってみました。使い方はほとんど ArrayObject と同じです。 クラス定義 class Collection extends ArrayObject { const TYPE_BOOL = 1; const TYPE_INT = 2; const TYPE_FLOAT = 4; const TYPE_STRING = 8; const TYPE_ARRAY = 16; const TYPE_OBJECT = 32; const TYPE_NUL
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く