配列内に存在する同じプレフィックスのキーで値がある場合のみ、別途格納したい

投稿者: Anonymous
$dataAry
(
    [a] => 
    [b] => 
    [d_1] => 
    [hoge_1] => 
    [c_1] =>
    [d_2] => 
    [hoge_2] => https://xxxx
    [c_2] =>
    [d_3] => 
    [hoge_3] => 
    [c_3] => 
)

上記配列に対して実行したい処理
・hoge_xに値がある時、hoge_xの値を$hogeAryへ格納
・hoge_xに値がある時、d_xの値を$dAryへ格納
→ hoge_2に値があるので、hoge_2の値を$hogeAryへ格納
→ hoge_2に値があるので、d_2の値を$dAryへ格納
※hoge_xの値が複数ある場合は、サフィックス昇順で格納
※上記以外のキーは関係ありません

欲しい結果

$hogeAry
(
    [0] => https://xxxx
)
$dAry
(
    [0] => 
)

作成したいコードのイメージ

$dAry=array();
$hogeAry=array();
foreach ($dataAry as $key=>$val){
  if(hoge_xに値がある時){
    $hogeAry[]=$val;
  }
  if(hoge_xに値がある時){
    x(であるサフィックス数値)を取得;
  }
}
foreach ($dataAry as $key=>$val){
  if($key==data_x){ //上記のようにhoge_xに値があるケースが1件だけならこれで良いと思うが、複数あった場合の書き方は?
    $dataAry[]=$val;
  }
}

解決

$dAry=array();
$hogeAry=array();
foreach ($dataAry as $key=>$val){
  if(strpos($key,'hoge_') !== false){
    $dAry[]=str_replace('hoge_', '', $key);
    $hogeAry[]=$val;
  }
}
array_multisort($dAry, SORT_ASC, $hogeAry);

こんな感じですかね。デバッグしてないですが。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *