Q:

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

$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;
  }
}

A:

$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);

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