あじちゃんのブログ。備忘録。

〜SEもOLなんですかね?

連想配列において特定のindexのみを抜き出して(加工したりして)配列にする処理

<?php

// 元になる配列
$data = array(
        array('id' => 1, 'name' => 'Bob', 'position' => 'Clerk'),
        array('id' => 2, 'name' => 'Alan', 'position' => 'Manager'),
        array('id' => 3, 'name' => 'James', 'position' => 'Director', 'hoge' => 'hogeeeeee')
);

// array_map()を使って、index=hogeを抽出/加工。  参考: https://www.php.net/manual/ja/function.array-map.php
$names = array_map(
        function($person) {
            // 'hoge'を持たないものは無視
            if (!empty($person['hoge'])){
                return ['NAME' => ">>>" . $person['hoge']];
            }
        },
        $data
);

print_r($names); // --- *1

// コールバック関数を使用して、空配列を除去する処理
$function = function($element) use ($names) {
    if (!empty($element)) {
        return $element;
    }
};

// array_filter()にコールバック関数として先の関数を指定する 参考: https://www.php.net/manual/ja/function.array-filter.php
// array_values()がindexを振り直してくれる 参考: https://www.php.net/manual/ja/function.array-values.php
$result = array_values(array_filter($names, $function));

print_r($result); // --- *2

*1 -- ただ抽出/加工したもの。空のコンテンツができてしまう。

Array
(
    [0] => 
    [1] => 
    [2] => Array
        (
            [NAME] => >>>hogeeeeee
        )

)

*2 -- indexが整い、目的のものが取り出される。indexの振り直しを行わなかった場合は[2] => Array....という感じになる

Array
(
    [0] => Array
        (
            [NAME] => >>>hogeeeeee
        )

)