閲覧数:1253
投稿日:2020-02-26
更新日:2020-02-27
目的
・配列キーに特定文字が含まれていたら、抽出して、新しい配列を作成する
条件
・'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); $lastAry = []; foreach ($resultAry as $key => $val){ foreach ($val as $key2 => $val2){ $newKey = strstr($key2, '_',true); //_キーより前の文字列を返す $lastAry[$key][$newKey]=$val2 ; //キーの一部分を削除する。そのために、キーの一部分を削除した、新たなキーの配列を作成する } } var_export($lastAry);
結果
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) "" } } array ( 0 => array ( 'title' => 'タイトル1', 'url' => 'URL1', 'content' => 'コンテンツ1', 'note' => '', ), 1 => array ( 'title' => 'タイトル2', 'url' => 'URL2', 'content' => 'コンテンツ2', 'note' => '', ), )