Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
30
Help us understand the problem. What is going on with this article?
@ao_love

PHP配列関数まとめ

More than 3 years have passed since last update.

過去記事の配列関数をまとめてみました。
~系の表記は私の造語(?)なのでもっといい感じの奴があれば教えてください!
関数名は全部マニュアルにリンクしてるので、詳細はマニュアルをどうぞ!

配列操作系

要素の追加や削除、置き換えなど、配列の構成を変える関数
配列の要素そのものを加工はしない。

array_shift

array_shift ( array &$array )

配列の先頭を切り取って返す。
返り値は配列の先頭にいた値。元の配列からはその値はなくなる。
添え字が数値だった場合は添字も振りなおされる。
元の配列から値をシフトする。

array_shift
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
    [4] => grape
)
*/

$fruit = array_shift($arr);
print_r($arr);
/*
Array
(
    [0] => orange
    [1] => apple
    [2] => peach
    [3] => grape
)
*/
print_r($fruit)
// banana

array_pop

array_pop ( array &$array )

array_shiftの最後バージョン。最後を切り取って返す。
数字なら添字も詰まるので、array_popした後要素を追加した場合はその位置に入る。ポップアップとかのイメージ。なぜpullとかpickにしてくれなかったのか…。

array_pop
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
    [4] => grape
)
*/

$fruit = array_pop($arr);
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
)
*/
print_r($fruit);
// grape

$arr[] = "mango";
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
    [4] => mango
)
*/

array_unshift

array_unshift ( array &$array ,"追加する値"[,"追加する値"] )
1つ以上の要素を配列の先頭に追加。追加する順は引数として与えた順序のまま。添字が数値なら0から振りなおされる。
shift(取り出し)の逆だからunshiftなんだろうけど…いまいちピンとこない。

array_unshift
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
    [4] => grape
)
*/

array_unshift($arr,"mango","melon");
print_r($arr);
/*
Array
(
    [0] => mango
    [1] => melon
    [2] => banana
    [3] => orange
    [4] => apple
    [5] => peach
    [6] => grape
)
*/

array_push

array_unshiftの後ろバージョン。最後に値を追加。
$arr[]と動きは同じ。1個だけなら$arr[]の方が早い。
配列の後ろに値を押し付ける、なイメージ。

array_push
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
    [4] => grape
)
*/

array_push($arr,"mango","melon");
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
    [4] => grape
    [5] => mango
    [6] => melon
)
*/

array_slice

array_slice ( array $array , 開始位置 [, 個数 [, キーを維持するかどうか ]] )

配列の切り出し。指定された位置の配列を返す。
個数を指定しない場合は開始位置から末尾まで。
負の数の場合は末尾からの数。
元の配列はそのまま。

array_slice
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
    [4] => grape
)
*/

$arr1 = array_slice($arr,2);
print_r($arr1);
/*
Array
(
    [0] => apple
    [1] => peach
    [2] => grape
)
*/
$arr2 = array_slice($arr,-2);
print_r($arr2);
/*
Array
(
    [0] => peach
    [1] => grape
)
*/
$arr3 = array_slice($arr,-4,-1);
print_r($arr3);
/*
Array
(
    [0] => orange
    [1] => apple
    [2] => peach
)
*/
$arr4 = array_slice($arr,2,-1);
print_r($arr4);
/*
Array
(
    [0] => apple
    [1] => peach
)
*/
$arr5 = array_slice($arr,2,-1,true);
print_r($arr5);
/*
Array
(
    [2] => apple
    [3] => peach
)
*/

array_splice

array_splice ( array &$input , 削除開始位置 [, 個数[, 置き換える配列]] )

配列の一部を削除し、空いた部分に代わりの配列を置く。
キーは維持されない。

array_splice
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => apple
    [3] => peach
    [4] => grape
)
*/

array_splice($arr,1,3,array("mango","melon"));
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => mango
    [2] => melon
    [3] => grape
)
*/

array_merge

array array_merge ( array $array1 [, array $... ] )

ひとつまたは複数の配列をマージする
キーが同じ文字列の場合は後ろの値1で上書き 。
キーが数字の場合は0から振りなおされて値は追記される。

array_merge
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));

print_r(array_merge_recursive($ar1, $ar2));
/*
Array
(
    [color] => Array
        (
            [favorite] => green //$ar1["color"]["favorite"]の"red"が上書きされてなくなる
            [0] => blue //$ar2["color"][0]の値が追記
        )

    [0] => 5 //$ar1[0]
    [1] => 10 //$ar2[0]
)
*/

array_merge_recursive

array array_merge_recursive ( array $array1 [, array $... ] )

二つ以上の配列を再帰的にマージする
キーが同じ文字列の場合は一つの配列にまとめられる。
キーが数字の場合は0から振りなおされて値は追記される。

array_merge_recursive
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));

print_r(array_merge_recursive($ar1, $ar2));
/*
Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red     //$ar1["color"]["favorite"]
                    [1] => green   //$ar2["color"]["favorite"]
                )

            [0] => blue //$ar2["color"][0]
        )

    [0] => 5  //$ar1[0]
    [1] => 10 //$ar2[0]
)
*/

配列処理系

配列の要素そのものを足したり、ひとつひとつに処理を施したりする。

array_sum

array_sum ( array $array )

配列の中の値の合計を計算する

array_sum
$arr = array(1,3,5,7,9);
echo array_sum($arr);
/*
25
*/

array_filter

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

$callbackの関数で$arrayの配列をフィルタリングし、結果がtrueの場合に$arrayの現在の値が結果の配列に入る。キーは保持。
※コールバック関数は真偽を返すものである必要がある

array_filter
function odd($num){
  //奇数かどうかを返す
  return($num & 1);
}

function even($num){
  //偶数かどうかを返す
  return(!($num & 1));
}

$arr = [1,2,3,4,5];
print_r(array_filter($arr,"odd"));
/*
Array
(
    [0] => 1
    [2] => 3
    [4] => 5
)
*/

print_r(array_filter($arr,"even"));
/*
Array
(
    [1] => 2
    [3] => 4
)
*/

PHP5.3以上
//PHP5.3以上なら無名関数がつかえる
$arr = array("banana","orange",2,"apple","peach","grape",6);
print_r($arr);
/*
Array
(
    [0] => banana
    [1] => orange
    [2] => 2
    [3] => apple
    [4] => peach
    [5] => grape
    [6] => 6
)
*/
$arr1 = array_filter($arr, function($val){ return is_string($val); });
print_r($arr1);
/*
Array
(
    [0] => banana
    [1] => orange
    [3] => apple
    [4] => peach
    [5] => grape
)
*/

array_map

array array_map ( callable $callback , array $array1 [, array $array2] )

$array1 の各要素に $callbackの関数を適用した後、 その全ての要素を含む配列を返す。array_mapに渡される配列の数と、$callbackが受け付けるパラメータの数は一致している必要がある。

2つ以上の配列を使う時、配列の長さは等しい必要がある。
もし長さが違った場合は、短い方を空の要素で埋めて、長い方に合わせる。

array_map
function en($n,$m){
    return ($n."は英語で【".$m."】です。");
}

function fr($n,$m){
    return ($n."はフランス語で【".$m."】です。");
}

$arr1 = [1,2,3,4,5,6];
$arr2 = ["one","two","three","four","five","six"];
$arr3 = ["un","deux","trois","quatre","cinq"];

print_r(array_map("en",$arr1,$arr2));
/*
Array
(
    [0] => 1は英語で【one】です。
    [1] => 2は英語で【two】です。
    [2] => 3は英語で【three】です。
    [3] => 4は英語で【four】です。
    [4] => 5は英語で【five】です。
    [5] => 6は英語で【six】です。
)
*/

print_r(array_map("fr",$arr1,$arr3));
/*
Array
(
    [0] => 1はフランス語で【un】です。
    [1] => 2はフランス語で【deux】です。
    [2] => 3はフランス語で【trois】です。
    [3] => 4はフランス語で【quatre】です。
    [4] => 5はフランス語で【cinq】です。
    [5] => 6はフランス語で【】です。//$arr3の要素は5つしかないので【】の中は空になる
)
*/

配列の配列を生成

コールバック関数の名前としてNULLを用いることで配列の配列を構築することができる2

array_map
print_r(array_map(null,$arr1,$arr2,$arr3));

/*
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => one
            [2] => un
        )
    [1] => Array
        (
            [0] => 2
            [1] => two
            [2] => deux
        )
    [2] => Array
        (
            [0] => 3
            [1] => three
            [2] => trois
        )
    [3] => Array
        (
            [0] => 4
            [1] => four
            [2] => quatre
        )
    [4] => Array
        (
            [0] => 5
            [1] => five
            [2] => cinq
        )
    [5] => Array
        (
            [0] => 6
            [1] => six
            [2] => 
        )
)
*/

元記事

配列関数
配列操作


  1. 最初の値を残したい場合は配列結合演算子+を使う。 

  2. Pythonとかだとzip関数というものがあるらしい 

30
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ao_love
にわかぺちぱー

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
30
Help us understand the problem. What is going on with this article?