がっつり既出ネタ
array_zip
phpでarray_zip()みたいなことをしたい。
つまり、pythonのzipのように リストを二つ渡すとタプルのリストを生成してくれる関数がほしい。
# -*- coding: utf-8 -*- a = [1,2,3] b = ["a", "b", "c"] zip(a,b) # [(1, 'a'), (2, 'b'), (3, 'c')]
ついでに
# ... c = [4,5,6] zip(a,b,c) # [(1, 'a', 4), (2, 'b', 5), (3, 'c', 6)]
みたいにn-tupleが生成できると嬉しい。
phpにタプルは無いけれど配列ベースでなら、array_mapのコールバック関数にnullを指定するとできるらしい。
<?php $a = [1,2,3] $b = ["a", "b", "c"] array_map(null, $a, $b); # [[1, "a"], [2, "b"], [3, "c"]] ?>
とのこと。 関数化すると、こんな感じ
<?php function array_zip($args) { $args = func_get_args(); array_unshift($args, null); return call_user_func_array("array_map", $args); } ?>
もちろん配列ベースなのでmutableだし要素追加も出来てしまうんだけど、・・・
あれ・・・メリットあるのかな・・・
array_column
array_系の関数といえばphp5.5からのarray_columnが楽しそうです。 いわゆるpluck*1的なことができる関数で、PHP: array_column - Manualから例を持ってくると、
<?php $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $first_names = array_column($records, 'first_name'); # ["John", "Sally", "Jane", "Peter"] ?>
のような感じ。