LoginSignup
0
0

More than 5 years have passed since last update.

【情報整理⑤】PHPの頻出関数を整理して、画面遷移過多による眼病を予防 ~ 配列編 ~

Posted at
  • Netflixによって世界中から人気を博している「こんまり」さんに、多大な影響を受けて情報整理をしていく記事第五弾。
  • 前回からの健康活動が、「実は整理するために大量に検索しているぶん、画面遷移量は変わらないので、角膜損傷が悪化している」という誰でも分かる事実と、見事に距離を置きながら生活をする現状。
  • 今回は、PHPの頻出関数の「配列」を整理していくことにしよう。

PHP頻出関数

配列

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_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(配列,定義関数)

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() は配列の先頭から要素を取り出し、

  • 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関数メモの第二回目ということで、「この整理が完了しても、常に大量の情報を欲している検索魔のため、この予防運動は無意味である」という突き付けられた運命を受け入れながら、記事を書く。
  • 公式マニュアル」や「逆引き大全」での膨大な量から、すかさず逃避して「ネットの参考記事の項目をそのまま使う」という、他人依存優等生をこの上なく発揮。
  • 「とはいえ、この関数整理も残り少なくなってくると、愛着がわき、さびしいものだ」という、医学的にも解明されている人間的思考に、しっかり陥りながら、次の整理をすることにしよう。

参考

0
0
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
0