- Netflixによって世界中から人気を博している「こんまり」さんに、多大な影響を受けて情報整理をしていく記事第五弾。
- 前回からの健康活動が、「実は整理するために大量に検索しているぶん、画面遷移量は変わらないので、角膜損傷が悪化している」という誰でも分かる事実と、見事に距離を置きながら生活をする現状。
- 今回は、PHPの頻出関数の「配列」を整理していくことにしよう。
PHP頻出関数
-
PHP頻出関数
-
配列
- array_key_exists()
- array_slice()
- array_merge(), array_merge_recursive()
- in_array()
- shuffle()
- sort(), rsort()
- asort(), arsort()
- ksort(), krsort()
- usort(), uasort(), uksort()
- array_multisort()
- array_unique()
- array_reverse()
- array_shift(), array_pop()
- array_walk(), array_walk_recursive()
- array_search()
- implode(), explode()
- range()
- current()
- next(), prev()
- reset(), end()
- extract()
- list()
- is_array()
-
配列
- まとめ
- 参考
配列
array_key_exists()
指定したキー、または添字が配列にあるか、調べる。
-
issetの違い
- キーがNULLでも、「true」が出る。
// array_key_exists( 'キー', $配列名 )
$search_array = array('number' => 1, 'name' => '佐藤');
if (array_key_exists('neme', $search_array)) {
echo 'ある';
}else{
echo 'ない';
}
// 実行結果
// ない
array_slice()
配列から連続した要素を取得する。
// array_slice(取得元配列,開始位置,要素数)
$name = array('佐藤','田中','鈴木','上野','高橋','斉藤','中野');
$result = array_slice($name,2,3);
foreach($result as $key => $value){
echo "$key : $value\n";
}
// 実行結果
/*
0 : 鈴木
1 : 上野
2 : 高橋
*/
array_merge(), array_merge_recursive()
// array_merge(配列1,配列2,配列3)
<?php
$data = array('name' => '佐藤', '田中', '大橋');
$info = array("田中", "大橋", "name" => "鈴木", "age" => 56, '高橋');
$result = array_merge($data, $info);
print_r($result);
?>
// 実行結果
/*
Array
(
[name] => 鈴木
[0] => 田中
[1] => 大橋
[2] => 田中
[3] => 大橋
[age] => 56
[4] => 高橋
)
*/
// array_merge_recursive(配列1,配列2,配列3)
<?php
$data = array("name" => array("nickname" => "さとっち"), '鈴木');
$info = array('上野', "name" => array("nickname" => "たなくん", "高橋"));
$result = array_merge_recursive($data, $info);
print_r($result);
// 実行結果
/*
Array
(
[name] => Array
(
[nickname] => Array
(
[0] => さとっち
[1] => たなくん
)
[0] => 高橋
)
[0] => 鈴木
[1] => 上野
)
*/
in_array()
配列の中に指定された値が含まれているかを返す。
第三引数指定は任意だが、デフォルトがfalseのため、trueを指定しとかないと、予期せぬ結果を起こす可能性がある。
// in_array('キー', $配列, true)
$numbers = [0, 1, 2, 3, 4, 5];
var_dump(in_array(3,$numbers, true));
var_dump(in_array('佐藤', $numbers, true));
// 実行結果
/*
bool(true)
bool(false)
*/
shuffle()
配列をランダムにシャッフルする。
// shuffle(配列)
$numbers = [1,3,5,7,9];
shuffle($numbers);
foreach ($numbers as $number) {
echo "$number\n";
}
// 実行結果
/*
7
3
9
5
1
*/
sort(), rsort()
// sort(配列,動作オプション)
$numbers = array(4,3,2,8,34,6463,353,653);
sort($numbers);
foreach($numbers as $key => $value){
echo "$key : $value\n";
}
// 実行結果
/*
0 : 2
1 : 3
2 : 4
3 : 8
4 : 34
5 : 353
6 : 653
7 : 6463
*/
// 動作オプション指定の場合。
$names = array("a1", "A6", "a2", "B1");
sort($names, SORT_NATURAL | SORT_FLAG_CASE);
foreach ($names as $key => $value) {
echo "$key : $value\n";
}
// 実行結果
/*
0 : a1
1 : a2
2 : A6
3 : B1
*/
asort(), arsort()
// asort(連想配列,動作オプション)
$data = ['name' => 'john','age' => 78,'hobby' => 'anime','job' => 'engineer'];
asort($data);
foreach($data as $key => $value){
echo "$key : $value\n";
}
// 実行結果
/*
hobby : anime
job : engineer
name : john
age : 78
*/
// 動作オプション指定
$data = ['name' => 'john','age' => 78,'hobby' => 'anime','job' => 'engineer'];
asort($data,SORT_LOCALE_STRING);
foreach($data as $key => $value){
echo "$key : $value\n";
}
// 実行結果
/*
age : 78
hobby : anime
job : engineer
name : john
*/
ksort(), krsort()
// ksort(連想配列,動作オプション)
$data = ['name' => 'john','age' => 78,'hobby' => 'anime','job' => 'engineer'];
ksort($data);
foreach($data as $key => $value){
echo "$key : $value\n";
}
// 実行結果
/*
age : 78
hobby : anime
job : engineer
name : john
*/
// 動作オプション指定
$data = ['name' => 'john','age' => 78,'hobby' => 'anime','job' => 'engineer'];
ksort($data,SORT_NUMERIC);
foreach($data as $key => $value){
echo "$key : $value\n";
}
// 実行結果
/*
name : john
age : 78
hobby : anime
job : engineer
*/
usort(), uasort(), uksort()
ユーザー定義関数に基づき、配列をソートする。
usortは、キーも並びかわる。
uasortは、キーを変えずに並びかえる。
uksortは、キーによって並びかえる。
動作オプション指定可能。
// usort(配列,定義関数)
function comp($a, $b)
{
return strcmp($a["name"], $b["name"]);
}
$names[0]["name"] = "tanaka";
$names[1]["name"] = "suzuki";
$names[2]["name"] = "ueno";
usort($names, "comp");
while (list($key, $value) = each($names)) {
echo "\$names[$key]: " . $value["name"] . "\n";
}
// 実行結果
/*
$names[0]: suzuki
$names[1]: tanaka
$names[2]: ueno
*/
// uasort(配列,定義関数)
function comp($a, $b)
{
return strcmp($a["name"], $b["name"]);
}
$names[0]["name"] = "tanaka";
$names[1]["name"] = "suzuki";
$names[2]["name"] = "ueno";
uasort($names, "comp");
while (list($key, $value) = each($names)) {
echo "\$names[$key]: " . $value["name"] . "\n";
}
// 実行結果
/*
$names[1]: suzuki
$names[0]: tanaka
$names[2]: ueno
*/
function comp($a, $b)
{
return strcmp($a["name"], $b["name"]);
}
$names[0]["name"] = "tanaka";
$names[1]["name"] = "suzuki";
$names[2]["name"] = "ueno";
uksort($names, "comp");
while (list($key, $value) = each($names)) {
echo "\$names[$key]: " . $value["name"] . "\n";
}
// 実行結果
/*
$names[0]: tanaka
$names[1]: suzuki
$names[2]: ueno
*/
array_multisort()
複数の配列を他の配列の値をもとにソートする。
// array_multisort(並び変える配列,対象配列,オプション)
$numbers = array(15, 343, 55, 75);
$new_numbers = array(2, 4, 3, 7);
array_multisort($numbers, $new_numbers);
print_r($numbers);
print_r($new_numbers);
// 実行結果
/*
Array
(
[0] => 15
[1] => 55
[2] => 75
[3] => 343
)
Array
(
[0] => 2
[1] => 3
[2] => 7
[3] => 4
)
*/
array_unique()
配列から重複した値を削除して返す。
// array_unique(配列)
$number = array(18, "17", "34", 343, 34, "38");
$result = array_unique($number);
print_r($result);
// 実行結果
/*
Array
(
[0] => 18
[1] => 17
[2] => 34
[3] => 343
[5] => 38
)
*/
array_reverse()
配列の要素を逆順にして返す。
// array_reverse(配列)
$number = array(56,64,43,3,5,25,2,52);
$result = array_reverse($number);
print_r($result);
// 実行結果
/*
Array
(
[0] => 52
[1] => 2
[2] => 25
[3] => 5
[4] => 3
[5] => 43
[6] => 64
[7] => 56
)
*/
array_shift(), array_pop()
// array_shift(配列)
$names = array('佐藤','高橋','鈴木','田中','黒川');
$result = array_shift($names);
print_r($names);
// 実行結果
/*
Array
(
[0] => 高橋
[1] => 鈴木
[2] => 田中
[3] => 黒川
)
*/
// array_pop(配列)
$names = array('佐藤','高橋','鈴木','田中','黒川');
$result = array_pop($names);
print_r($names);
// 実行結果
/*
Array
(
[0] => 佐藤
[1] => 高橋
[2] => 鈴木
[3] => 田中
)
*/
array_walk(), array_walk_recursive()
// array_walk(配列,定義関数,引数オプション)
$array = array(10,20,30,40,50);
function ten_add (&$i) {
$i += 10;
}
array_walk($array,'tenAdd');
print_r($array);
// 実行結果
/*
Array
(
[0] => 20
[1] => 30
[2] => 40
[3] => 50
[4] => 60
)
*/
// array_walk_recursive(配列,定義関数,引数オプション)
$data = array('name' => '佐藤', 'age' => '67');
$info = array('company' => $data, 'friend' => 'たくさん');
function show_info($item, $key)
{
echo "$key : $item\n";
}
array_walk_recursive($info, 'show_info');
// 実行結果
/*
name : 佐藤
age : 67
friend : たくさん
*/
array_search()
指定要素を配列から検索。
見つかった場合キー(要素番号)を返し、見つからなかった場合、falseを返す。
「型チェックオプション」は省略可能だが、型判定をきちんと行うために、指定する。
// array_search(検索値,配列,型チェックオプション)
$names = ['佐藤', '鈴木', '田中'];
$result = array_search('佐藤', $names,TRUE);
print_r($result);
// 実行結果
// 0
$names = ['佐藤', '鈴木', '田中'];
$result = array_search('高橋', $names,TRUE);
echo $result;
// 実行結果
// (false)
implode(), explode()
implode() は指定された区切り文字をもとに配列を文字列として結合。
指定配列は一次元配列である必要がある。
explode() は指定された区切り文字を元に文字列を配列に変換する。
// implode(区切り文字,配列)
$names = ['佐藤', '田中', '鈴木'];
$result = implode(',', $names);
echo $result;
// 実行結果
// 佐藤,田中,鈴木
<?php
// explode ( 区切り文字列 , 対象の文字列 ,最大要素数 )
// 例1. 最大要素数指定なし。
$arrayDayList = explode("/","2019/02/28");
print_r($arrayDayList);
// 例2. 最大指定数指定あり。
$arrayEnglish = explode("/","A/B/C/D/E",2);
print_r($arrayEnglish);
// 実行結果
/*
Array
(
[0] => 2019
[1] => 02
[2] => 28
)
*/
range()
指定された範囲の整数・文字を持つ配列を作成する。
// range(開始値,終了値,要素毎の増加数)
// 増加数指定無しの場合
foreach (range(0, 12) as $number) {
echo $number;
}
// 実行結果
// 0123456789101112
// 増加数指定有りの場合
foreach (range('a', 'z',5) as $english) {
echo $english;
}
// 実行結果
// afkpuz
current()
現在の配列のポインタが指す値取得。
// next($配列)
$names = array( "佐藤", "鈴木" , "田中" );
$name = current($names);
echo "$name";
// 実行結果
// 佐藤
next(), prev()
// next($配列)
// prev($配列)
$names = array( "佐藤", "鈴木" , "田中" );
$name = current($names);
echo "$name\n";
next($names);
$name = current($names);
echo "$name\n";
prev($names);
$name = current($names);
echo "$name";
// 実行結果
/*
佐藤
鈴木
佐藤
*/
reset(), end()
reset()は配列のポインタを先頭の要素へ初期化し、その値を取得。
reset()は配列のポインタを最後の要素へ進めて、その値を取得。
配列の最初や最後の要素を取得する目的で使うことが多い。
// reset($配列)
// end($配列)
$names = array( "佐藤", "鈴木" , "田中" );
$name = current($names);
echo "$name\n";
$names = array( "佐藤", "鈴木" , "田中" );
$name = next($names);
echo "$name\n";
$names = array( "佐藤", "鈴木" , "田中" );
$name = reset($names);
echo "$name\n";
$names = array( "佐藤", "鈴木" , "田中" );
$name = end($names);
echo "$name";
// 実行結果
/*
佐藤
鈴木
佐藤
田中
*/
extract()
配列を複数の変数に展開する。
引数に指定できるオプションは、「EXTR_OVERWRITE」以外にもたくさんある。
※信頼できない「$_GET」「$_POST」「$_FILES」には、絶対使わない
// extract($配列);
$data = array(
"name" => "佐藤",
"age" => "68",
"hobby" => "アイドル鑑賞"
);
extract($data);
echo "名前 : {$name}";
// 実行結果
// 名前 : 佐藤
// 「EXTR_OVERWRITE」オプションを指定して、既存の変数を上書き。
$name = '田中';
$data = array(
"name" => "佐藤",
"age" => "68",
"hobby" => "アイドル鑑賞"
);
extract($data,EXTR_OVERWRITE);
echo "名前 : {$name}";
// 実行結果
// 名前 : 佐藤
list()
配列の値を、複数の変数に代入。
厳密には関数ではなく言語構造である。
// list(変数) = 配列
$data = array('佐藤', '12', '読書');
list($name, $age, $hobby) = $data;
echo "名前 : " . $name;
// 実行結果
// 名前 : 佐藤
$names = ['佐藤','田中','鈴木','鈴木','小松'];
$items = ['item1', 'item2', 'item3'];
list($names[0], $names[2]) = $items;
print_r($names);
// 実行結果
/*
Array
(
[0] => item1
[1] => 田中
[2] => item2
[3] => 鈴木
[4] => 小松
)
*/
is_array()
渡された変数が配列であるかを返す。
// is_array(変数)
$data = array("東京","大阪","福岡");
is_array($data)
if (is_array($data) ) {
echo "配列です";
} else {
echo "配列ではありません";
}
// 実行結果
// 配列です
まとめ
- 今回は、PHP関数メモの第二回目ということで、「この整理が完了しても、常に大量の情報を欲している検索魔のため、この予防運動は無意味である」という突き付けられた運命を受け入れながら、記事を書く。
- 「公式マニュアル」や「逆引き大全」での膨大な量から、すかさず逃避して「ネットの参考記事の項目をそのまま使う」という、他人依存優等生をこの上なく発揮。
- 「とはいえ、この関数整理も残り少なくなってくると、愛着がわき、さびしいものだ」という、医学的にも解明されている人間的思考に、しっかり陥りながら、次の整理をすることにしよう。
参考
-
https://php-archive.net/php/essential-php-functions/
→今回もこちらの記事を参考にしました。大変お世話になりました。