You are on page 1of 29

配 列 関 数 に

つ い て

@iogi
Photo taken by teddy-rised
こんにちは
• おぎわら
• 最近は、PHPというか
配信のひと

• d.hatena.ne.jp/i_ogi/
• Twitter/Wassr: @iogi Photo taken by Kiryu Tsukimiya
PHPといえば

Photo taken by DragonBe


配列
a r r ay
Photo taken by Gord McKenna
array_key_exists(), asort
(), array_merge()
なんかいろいろ
配列関数ありますよね
array_change_key_case array_chunk array_combine
array_count_values array_diff_assoc array_diff_key
array_diff_uassoc array_diff_ukey array_diff array_fill_keys
array_fill array_filter array_flip array_intersect_assoc
array_intersect_key array_intersect_uassoc
array_intersect_ukey array_intersect array_key_exists
array_keys array_map array_merge_recursive array_merge
array_multisort array_pad array_pop array_product
array_push array_rand array_reduce array_replace_recursive
array_replace array_reverse array_search array_shift
array_slice array_splice array_sum array_udiff_assoc
array_udiff_uassoc array_udiff array_uintersect_assoc
array_uintersect_uassoc array_uintersect array_unique
array_unshift array_values array_walk_recursive array_walk
array arsort asort compact count current each end extract
in_array key krsort ksort list natcasesort natsort next pos prev
range reset rsort shuffle sizeof sort uasort uksort usort
注: 一部に関数ではなく言語構造のもの、また、エイリアスを含む
PHP5.3からは
SplFixedArray
が追加されたりとか
配列関数も
まだ増え続けて
います
PHP5.3では78関数に
一番使われてる
配列関数は何?
一番マイナーな
配列関数は何?
ランキングを
出してみる
材料

PHPdoc
+
google code search
api
PHPドキュメント

PHPドキュメントは、XMLで書かれている

関数一覧のXMLがあるので (versions.xml)
それを利用する
http://svn.php.net/repository/phpdoc/en/trunk/reference/array/versions.xml
function get_functions_list()
{
$xml = simplexml_load_file(LIST_XML_URL);
$list = array();

foreach($xml->function as $function) {
$list[] = (string) $function['name'];
}

return $list;
}
google code search
google code search API

\Warray\(\s*\$ lang:php
正規表現で 言語をPHPに
$x = array($hoge)

http://www.google.com/codesearch/feeds/
search?q=\Warray\(\s*\$%%20lang:php
function gen_query($funcname) {
// _ を含まず、第1引数が必ず変数であるとはいえないもの
$special_funcs = array('array', 'compact', 'range');

// JS対策
if (!preg_match('/_/', $funcname) &&
!in_array($funcname, $special_funcs)) {
$query = '%s?q=\W%s\(\s*\$%%20lang:php';
} else {
$query = '%s?q=\W%s\(%%20lang:php';
}

$query = sprintf($query, CODESEARCH_URL, $funcname);


return $query;
}

function get_result_count($funcname) {
$url = gen_query($funcname);
$xml = simplexml_load_file($url);
return ((int) $xml->children('opensearch',1)->totalResults);
}
できた
ランキング
10位∼4位
! 4位! in_array()! 266000
! 5位! array_merge()! 159000
! 6位! sizeof()! 143000
! 7位! array_keys()! 135000
! 8位! array_key_exists()! 108000
! 9位! each()! 102000
! 10位! reset()! 92200
3位∼1位

!1位! array()! 1950000


!2位! count()! 674000
!3位! list()! 288000

注: array()・list()は関数ではなく言語構造です。
ご注意

array_∼系以外の関数、例えば
sizeof等は、PHPファイル内の
JavaScriptのコードがひっかか
るので精度がよくない
70位∼
!77位! array_replace_recursive()! 2
!76位! array_product()! 26
!74位! array_diff_uassoc()! 28
!  ! array_intersect_uassoc()! 28
!73位! array_uintersect()! 29
!70位! array_uintersect_uassoc()! 37
!  ! array_uintersect_assoc()! 37
! ! array_udiff_uassoc()! 37
なんか
名前が長ったらしくて
見た記憶はあるけども
使ったことがない感じ
納得!
最下位のarray_replace_recursive
PHP5.3から追加された関数
array array_replace_recursive(array &$array , array &$array1
[, array &$array2 [, array &$... ]] )
array_replace_recursive()は、 最初の配列の値をそれ以降の配列の同じ
要素の値で置き換えます。 最初の配列のキーと同じキーが2番目の配列
にあれば、 2番目の配列の値が最初の配列の値を上書きします。2番目の
配列に存在するキーが最初の配列に存在しなければ、 そのキーが新た
に最初の配列内に作られます。最初の配列にしか存在しないキーについ
ては何も変わりません。 置き換え用の配列が複数渡された場合は渡した
順に処理を行い、後から渡した配列の値のほうが優先されます。
まとめ
ループで配列を処理するような
コードを書いているとき、たま
に一発で、高速に処理できる配
列関数があったりするので、た
まに眺めると吉
ありがとうございました
Photo taken by Tobias Schlitt

You might also like