PHP

【PHP】連想配列の数値キーのみをリセットする方法

どうも、katです。

今回はPHPの連想配列についての記事になります!

検索しても意外と解決策が出てこなかったので今回の記事を書きました!

やりたいこと

今回は、以下のような変換を行うことが目的です。

★変換前

Array
(
    [5] => Array
        (
            [name] => 田中 太郎
            [favoriteFoods] => Array
                (
                    [4] => みかん
                    [1] => たこやき
                    [6] => 卵焼き
                )
            [age] => 16才
        )
    [2] => Array
        (
            [name] => 田中 花子
            [favoriteFoods] => Array
                (
                    [7] => りんご
                    [5] => バナナ
                    [2] => ホットケーキ
                )
            [age] => 15才
        )
    [7] => Array
        (
            [name] => 田中 二郎
            [favoriteFoods] => Array
                (
                    [9] => いちご
                    [8] => ラーメン
                )
            [age] => 12才
        )
)

★変換後

Array
(
    [0] => Array
        (
            [name] => 田中 太郎
            [favoriteFoods] => Array
                (
                    [0] => みかん
                    [1] => たこやき
                    [2] => 卵焼き
                )
            [age] => 16才
        )
    [1] => Array
        (
            [name] => 田中 花子
            [favoriteFoods] => Array
                (
                    [0] => りんご
                    [1] => バナナ
                    [2] => ホットケーキ
                )
            [age] => 15才
        )
    [2] => Array
        (
            [name] => 田中 二郎
            [favoriteFoods] => Array
                (
                    [0] => いちご
                    [1] => ラーメン
                )
            [age] => 12才
        )
)

見てお分かりの通り「数字のキー」のみが0からの採番にリセットしたいというのが今回やりたいこととなります。

数字キーのみリセットする方法

それでは実際にリセットする方法ですが、以下の関数を作成することでリセットが可能となります。

/**
* 配列の数値キーをリセットする
* @param array $array 配列
* @return array リセット後の配列
*/
function resetKeys($array) {

    if (!is_array($array) || empty($array)) {
        return $array;
    }

    $firstKey = key(array_slice($array, 0, 1));

    // 配列の一つ目のキーが数値の場合のみリセットする
    if (is_numeric($firstKey)) {
        $array = array_values($array);
    }

    foreach ($array as $key => $val) {
        if (is_array($val)) {
            // 再起
            $array[$key] = resetKeys($val);
        }
    }

    return $array;
}

使い方

使うときは引数にキーをリセットしたい配列を渡すだけです。

$array = resetKeys($array);  // $arrayがリセットしたい配列

var_dump($array); // リセット後の内容を画面に表示します。(確認用)

簡単ですね!

最後に

いかがでしたか?

PHPの標準関数にありそうで意外となく、検索してもなかなか正しい情報に出会えなかったため備忘録の意味も込めて書きました。

同じように困っている方の少しでも助けになればと思います。

以上、PHPの連想配列の数値キーのみをリセットする方法でした〜。

ABOUT ME
kat
プログラマー歴7年、2歳の子供を持つパパです。 興味のあることはプログラミングや今後のIT技術などです。 趣味でオンラインカードゲームのサイトを運営しております。 プログラミングを通して社会に貢献していきたいです。