0
1

More than 1 year has passed since last update.

PHPの配列操作(一部)

Last updated at Posted at 2022-02-10

PHPの配列

使用の際は公式で調べたほうが無難です

配列作成

//配列宣言
$配列名 = array('値1', '値2', '値3');
$配列名 = ['値1', '値2', '値3'];
//連想配列
$配列名 = array("キー1" => "値1", "キー2" => "値2");
$配列名 = ["キー1" => "値1", "キー2" => "値2"];

配列関連の関数

配列の結合

新しい配列 = array_merge (配列1, 配列2,・・・);

$arr1 = array('A','B');
$arr2 = array('C','D');

$arr3 = array_merge($arr1, $arr2);

配列 ⇨ 文字

文字列 = implode(区切り文字, 配列)
// 配列の要素と要素を区切り文字を挟んで連結する
// 1つの文字列にして返す。
// 区切り文字は省略可
$arr = array('AAA', 'BBB', 'CCC');
$result = implode(',', $arr); 

文字列 ⇨ 配列にする。

結果の配列 = explode(区切り文字, 文字列, 最大要素数)
// この配列の各要素は、文字列を区切り文字で区切った部分文字列となる。
// 文字列中の区切り文字は削除される。
// 最大要素数を指定した数に制限することもできる。省略可
// 先頭から順に区切り文字で区切られる
$string = 'AAA,BBB,CCC';
$result = explode(',', $string);

切り出す

結果の配列 = array_slice(入力の配列, 始点, 抽出する要素数);
// 切り取った部分を返す。
// 始点が配列のサイズより大きい場合は、空の配列を返す。
// 配列のポインタはリセットされる。
// 抽出する要素数は省略可
$arr = array(1, 2, 3, 4, 5);
$result = array_slice($arr, 0, 2);

キーが存在するか?

論理値 = array_key_exists(調べるキー, 調べる配列);
// 存在すれば「真(TRUE)」を返し、存在しなければ「偽(FALSE)」を返す。
$ary = array('name' => 'yamada','mail' => 'yamada@mail.com', 'tel' => '000-0000-0000');
if(array_key_exists('mail', $ary)){
    echo 'ある';
}else{
    echo 'なし';
}

値でキーを取得する

結果の配列 = array_keys(配列, 検索する値, 厳密な比較の指定)
// 配列の値を検索し、キーを配列で取得する
// 2番目の引数を指定した場合、指定した値のキーのみ取得する。(省略可)
// 3つ目の引数は「===」の比較を行うかどうかを指定する。デフォルトはfalse。(省略可)
$array = array("blue", "red", "green", "blue");
print_r(array_keys($array, "blue"));

値で、最初のキーを取得する

キー 又は FALSE = array_search(検索する値, 配列, 厳密な比較の指定);
// 配列の値を検索し、最初のキーを取得する
// 検索する値が文字列の場合大文字小文字が区別される
// この関数は論理値 FALSE を返す可能性があるが、FALSE として評価される値を返す可能性もある。
// 3つ目の引数は「===」の比較を行うかどうかを指定する。デフォルトはfalse。(省略可)
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;

変数がセットされているか

論理値 = isset(変数)
// 配列にも使用できる
// 配列の値がNULLの場合はfalseになる
// 空の配列はtrueになる
$array = array('first' => null, 'second' => 4);
isset($array['first']);// false を返します
isset($array['second']);// true を返します

$array = array();
isset($array);// true を返します

最後のキーを取得する

キー = array_key_last(配列)
// PHP 7.3.0 以上
// 内部的な配列のポインタに影響を与えない。
$array = array('a', 'b', 'c', 'd', 'e');
$key = array_key_last($array); // $key = 4;

値があるか?

論理値 = in_array(検索する値, 配列, TRUE);
// 3番目の引数を TRUE とした場合、型も調べる。デフォルトはfalse。(省略可)
// 検索する値が文字列の場合大文字小文字が区別される
$array = array('a', 'b', 'c', 'd', 'e');

if(in_array('a', $array)){
    echo $search.' は $array に存在します。';
}else{
    echo $search.' は $array に存在しません。';
}

最後の値を取得する

配列要素の値 = end(array $array);
// 配列の内部ポインタを最後の要素まで進め、要素の値を取得します。
// 空の配列の場合、FALSEを返す。
$val = array('January','February','March','April');
echo end($val);

使ったことはないけど便利そう

配列の先頭から要素を取り出して返す

配列の要素 = array_shift(配列);
// 取り出された配列は要素一つ分だけ短くなり、全ての要素は前にずれる。
// 数値添字の配列のキーはゼロから順に新たに振りなおされるが、リテラルのキーには影響しない。
$array = array(1,3,5);
$result = array_shift($array);

echo $result;// 1
var_dump($array);// $arr:[3,5]

配列から重複した値を削除する

結果の配列 = array_unique(配列);
// 値に重複のない新規配列を返す。
// キーは保持される
$array = array(1, 2, 1, 3, 2, 5);
$result = array_unique($array);

配列のキーを振り直しす。

// 配列から全ての値を取り出し、数値添字をつけた配列を返す。

$array = array("size" => "XL", "color" => "gold");
$result = array_values($array);

配列を分割する

結果の配列 = array_chunk(配列, サイズ(要素数) [,結果の配列のキーの振り方を指定]);
// 配列を前方から、指定した要素数で分割する。
// 分割された結果は多次元配列になる。
// 3つ目の引数を「TRUE」にするとキーと要素の関係を維持出できる
$array = array('a', 'b', 'c', 'd', 'e');
$result = array_chunk($array, 2, TRUE);

配列の各要素にコールバック関数を適用する。キーと値を使用できる

論理値 = array_walk(配列, '関数名' ,関数の第三引数);
// 成功すると「真(TRUE)」を返し、失敗すると「偽(FALSE)」を返す。
// コールバック関数の引数を2つ設定できる。
// 第一引数は配列の値、第二引数は配列のキーが入る
// 第三引数は省略可
$array = array(10, 20, 30, 40, 50);

function AddInt($item, $key){
   echo $item + $key; 
}
array_walk($array, 'AddInt');

指定した配列の要素にコールバック関数を適用する。複数の配列を扱える

結果の配列 = array_map('関数名', 配列, 配列,・・・)
// 各要素に関数を適用した後、 適用後の要素を含む配列を返す。
// 2つ目以降の配列は省略可
// 二つ以上の配列を使用する場合、 それらの長さは等しい必要がある。
function cube($n)
{
    return ($n * $n * $n);
}

$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);

配列の各要素にユーザ関数を適用し、フィルタリングを行う

結果の配列 = array_filter(配列, '関数名', モード);
// 関数によりフィルタ処理が行われた全ての要素を含む配列を返す。
// 関数がtrueを返した場合、 処理された値が結果の配列に入る。
// 配列のキーは保存される。
// モードのデフォルトは 0 値のみを関数の引数として渡す。
$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

function Odd($var){
    //渡された整数が奇数かどうかを返します
    return($var & 1);
}
$array2 = array_filter($array, 'Odd');

モード
ARRAY_FILTER_USE_KEY : 値ではなく、キーだけを callback の引数として渡す
ARRAY_FILTER_USE_BOTH : 値だけではなく、値とキーの両方を callback の引数として渡す

配列のキーと値を入れ替えたい

結果の配列 = array_flip(入力の配列);

$array = array('a' => 1,'b' => 2, 'c' => 3);
$result = array_flip($array);
// array(3) { [1]=> 'a' [2]=> 'b' [3]=> 'c' }

変数から配列を作成する

結果の配列 = compact(変数名, 変数名, ・・・);
// 変数名がキー、値が要素の配列を返す
$country = 'Japan';
$capital = 'Tokyo';
$result = compact('country', 'capital');
// array(3) { ['country']=> 'Japan' ['capital']=> 'Tokyo' }

連想配列を変数へ変換

extract(配列, フラグ);
// キーを変数名、値を変数の値に変換する
// フラグは無効または数値キーおよび衝突に関する対処法を指定する。デフォルトはEXTR_OVERWRITE
$array = array("color" => "blue", "size" => "medium");
extract($array);
echo $color; //"blue"
echo $size; //"medium"

フラグ
EXTR_OVERWRITE : 衝突があった場合、存在する変数が上書きされます。
EXTR_SKIP : 衝突があった場合、存在する変数は上書きされません。
EXTR_PREFIX_SAME : 衝突があった場合、prefix を前につけた新しい変数となります。第三引数が必要。
EXTR_PREFIX_ALL : 全ての変数の前に prefix を付けます。第三引数が必要。
EXTR_PREFIX_INVALID : 無効または数値の変数名のみに接頭辞 prefix を付けます。第三引数が必要。
EXTR_IF_EXISTS : 現在のシンボルテーブルに既に存在する場合にのみ上書きします。
EXTR_PREFIX_IF_EXISTS : 同じ変数だが接頭辞をつけていないバージョンの変数が 現在のシンボルテーブルに存在する場合にのみ 変数を生成します。第三引数が必要。
EXTR_REFS : 変数を参照として展開します。

第三引数
接頭辞を付けた変数名が有効な変数名でない場合、 この変数はシンボルテーブルにインポートされません。接頭辞は、 アンダースコア文字で配列のキーから自動的に分割されます。

配列要素を変数に格納

list(変数, 変数,・・・) = 配列;
// 配列と同様の形式で、複数の変数への代入を行う
$info = array('コーヒー', '茶色', 'カフェイン');
list($drink, $color, $power) = $info;
echo $drink;// 'コーヒー'
echo $color;// '茶色'
echo $power;// 'カフェイン'

配列の一部を削除し、他の要素で置換する

配列 = array_splice( 配列, 始点, 削除する要素の数, 置き換える要素を含んだ配列 )
// 配列から、始点および長さで指定された要素を削除し、配列でそれを置換する
// 第三引数、第四引数は省略可
// 削除された要素を配列として返す
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
var_dump($input);

配列の順番をランダムにする

論理値 = shuffle(配列);
// 配列の要素の順番をシャッフルしてランダムにします。 成功した場合に TRUE を、失敗した場合に FALSE を返す。
// 要素に対して新しいキーを割り当てる。既存のキーは削除される。 
$array = array('a', 'b', 'c');
shuffle($array);
var_dump($array);

指定した配列の 要素 を指定した 長さ と指定した 値 で埋めます。

結果の配列 = array_pad(元の配列, 新しい配列のサイズ, 追加する要素の値)
// 長さが正だと右側、負だと左側の要素が埋まります。
$arr = array(2, 3, 4);
$result = array_pad($arr, 7, 10);
var_dump($result);

// array(7) { [0]=> int(2) [1]=> int(3) [2]=> int(4) [3]=> int(10) [4]=> int(10) [5]=> int(10) [6]=> int(10) }

ループで処理する

for文

for(カウンタ; 条件; カウントアップ){
    処理
}
// カウントアップはダウンでもいい。ループするたびに毎回変化する
// 配列のインデックスを使用する時には分かりやすい
$array = array(1, 2, 3, 4, 5);
for ($i = 0; $i < count($array); $i++){
    echo $array[$i];
}

foreach文

// 配列の要素の一つづつ取り出して処理する
foreach( 配列 as 要素の値が入る変数){
    処理
}

// ループの中で配列の要素を直接変更したい場合は、 要素が入る変数 の前に & をつける。
foreach( 配列 as &変数){
    処理
}

// 添字も取り出す
// 連想配列のキーを扱いたいときに
foreach( 配列 as キーが入る変数 => 値が入る変数){
    処理
}

$array = array('A' => 1, 'B' =>  2, 'C' => 3, 'D' => 4, 'E' => 5);
foreach( $array as $key => $value){
    echo $key;
    echo $value;
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1