PHP 配列操作

どうもinappeです。PHPの配列操作ってどんな関数あんだっけ?普段使わないけれど便利なものあるはずだよね?ということでPHPマニュアルを調べてみました。PHPはマニュアルがしっかりしていて困ったときは本当にお世話になっています。では本題のarray関数いきまう。

array array_change_key_case


array array_change_key_case ( array $array [, int $case = CASE_LOWER ] )
array のすべてのキーを小文字あるいは大文字にした配列を返します。 数値添字はそのままとなります。

返り値:すべてのキーを小文字あるいは大文字にした配列を返します。 array が配列でない場合は FALSE を返します。

<?php
$input_array = array("FirSt" => 1, "SecOnd" => 4);
print_r(array_change_key_case($input_array, CASE_UPPER));

出力例

Array
(
    [FIRST] => 1
    [SECOND] => 4
)

array_chunk


array array_chunk ( array $array , int $size [, bool $preserve_keys = false ] )
配列を、要素数が size の配列に分割します。 最後の部分の要素数は size より小さくなることもあります。

返り値:数値添字の多次元配列を返します。添え字はゼロから始まり、 各次元の要素数が size となります。 第三引数がTRUE の場合はキーをそのまま保持します。 デフォルトは FALSE で、各部分のキーをあらためて数字で振りなおします。

<?php
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
print_r(array_chunk($input_array, 2, true));

出力例

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

    [2] => Array
        (
            [0] => e
        )

)
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [2] => c
            [3] => d
        )

    [2] => Array
        (
            [4] => e
        )
)

これ結構便利かも

array_column


array array_column ( array $array , mixed $column_key [, mixed $index_key = null ] )
array_column() は、 配列 array の中から column_key で指定した単一のカラムの値を返します。 オプションで index_key も指定できます。これを指定すると、 入力配列内のカラム index_key の値に基づいて結果を並べ替えます。

返り値:入力配列の単一のカラムを表す値の配列を返します。

<?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');
print_r($first_names);

出力例

Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

これも使えそう。

array_combine


array array_combine ( array $keys , array $values )
keys 配列の値をキーとして、また values 配列の値を対応する値として生成した 配列 を作成します。

返り値:作成した配列を返します。 互いの配列の要素の数が合致しない場合に FALSE を返します。

<?php
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);

出力例

Array
(
    [green]  => avocado
    [red]    => apple
    [yellow] => banana
)

これは二つの配列の要素数が同じでなければいけないことに注意。

array_count_values


array array_count_values ( array $array )
array_count_values() は、 配列 array の値をキーとし、 array におけるその値の出現回数を値とした配列を返します。

返り値:array のキーとその登場回数を組み合わせた連想配列を返します。

<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));

出力例

Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)

array_diff_assoc


array array_diff_assoc ( array $array1 , array $array2 [, array $... ] )
array1 を array2 と比較し、 その差を返します。array_diff() とは異なり、 配列のキーも用いて比較を行います。

返り値:array1 の要素のうち、 その他の配列のいずれにも含まれないものだけを残した配列を返します。

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result);

出力例

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

array_diff_key


array array_diff_key ( array $array1 , array $array2 [, array $... ] )
array1 のキーを array2 のキーと比較し、その差を返します。 この関数は array_diff() に似ていますが、 値ではなくキーを用いて比較するという点が異なります。

返り値:array1 の要素のうち、 その他の配列のいずれにも含まれないキーのものだけを残した配列を返します。

<?php
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

var_dump(array_diff_key($array1, $array2));

出力例

array(2) {
  ["red"]=>
  int(2)
  ["purple"]=>
  int(4)
}

array array_diff_uassoc


array array_diff_uassoc ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )
array1 のキーを array2 のキーと比較し、その差を返します。 この関数は array_diff() に似ていますが、 配列のキーを用いて比較するという点が異なります。
array_diff_assoc() とは異なり、 内部関数ではなくユーザーが指定したコールバック関数を用いて添字を比較します。

返り値:array1 の要素のうち、 その他の配列のいずれにも含まれないものだけを残した配列を返します。

<?php
function key_compare_func($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);

出力例

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

keyも値も唯一のものを取り出してくれる。うーむ、使いどころぱっと浮かばないw

ぐぐ、てかPHP、配列の関数多くないですか?(他の言語がどうかは知らないので何とも言えないですが)
やばい、全部しっかり熟読して簡単なメモにしたいけど眠すぎていったんここでアウト。。。