閲覧数:1433
投稿日: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' => '',
),
)