閲覧数:960
投稿日:2020-02-26
更新日:2020-02-26
配列キーに特定文字が含まれていたら、抽出して、新しい配列を作成する
・'xxxx_数字'キーが複数)ある
・数は変動する
'url_数字'キーの数だけ、数字毎に分けて二次元配列へ格納する
コード
$dataAry =array ( '_token' => 'xxxx', 'entry_id' => '1', 'user_id' => '1', 'site_id' => '', 'entry_title' => 'タイトル', 'entry_description' => '', 'category' => '1', 'state' => '5', 'tweet_create_datetime' => '', 'title_1' => 'タイトル1', 'url_1' => 'URL1', 'content_1' => 'コンテンツ1', 'note_1' => '', 'title_2' => 'タイトル2', 'url_2' => 'URL2', 'content_2' => 'コンテンツ2', 'note_2' => '', ); //'url_数字'キーの数をカウント $urlAry = array_filter($dataAry, function($key) { return strpos($key, 'url_') !== false; }, ARRAY_FILTER_USE_KEY); var_dump($urlAry); var_dump(count($urlAry)); for ($i = 1; $i <= count($urlAry); $i++) { $resultAry[] = array_filter($dataAry, function($key) use ($i) { //array_filterの変数スコープ。コールバック関数内で外部変数を取り扱う場合は、use()で外部変数を指定する必要がある return strpos($key, '_'.$i) !== false; }, ARRAY_FILTER_USE_KEY); } var_dump($resultAry);
結果
array(2) { ["url_1"]=> string(6) "URL1" ["url_2"]=> string(6) "URL2" } int(2) array(2) { [0]=> array(4) { ["title_1"]=> string(15) "タイトル1" ["url_1"]=> string(6) "URL1" ["content_1"]=> string(18) "コンテンツ1" ["note_1"]=> string(0) "" } [1]=> array(4) { ["title_2"]=> string(15) "タイトル2" ["url_2"]=> string(6) "URL2" ["content_2"]=> string(18) "コンテンツ2" ["note_2"]=> string(0) "" } }
配列キー内に「指定文字列が含まれるキー」と「その値」を抽出して、新しい配列を返す
'xxxx_数字'キーの数だけ、数字毎に分けて二次元配列へ格納後、キーのサフィックスを削除する / array_filter