この質問の問題を解決しなければいけないような事態に陥る前に設計を見直したほうが良いと思います。
質問ではキーが重複していて、$recipeArr['hoge']['clumn01']
なのか$recipeArr['test']['clumn01']
なのかあいまいです。
拡張性を考えれば「連想配列の位置をきちんと記録した上で、その位置を使って連想配列を検索する」としたほうがシンプルですし、拡張もしやすいかと思います。
好みの問題なのかもしれませんが。。。
答えが「設計を見直す」だと面白くないので真剣に考えてみました。
下記コードの関数を共通クラスのメソッドにすれば、ある程度拡張性もあるかと思います。(引数の条件をもっときちんと書かないといけないと思いますが)
php
1$clumnArr = [
2 0 => 'id',
3 1 => 'clumn01',
4 3 => 'clumn03',
5];
6
7$recipeArr = [
8 'hoge' => [
9 'id' => 'ID',
10 'clumn01' => 'ピーマン',
11 ],
12 'test' => [
13 'clumn01' => '人参',
14 'clumn02' => '玉ねぎ',
15 'clumn03' => 'キャベツ',
16 ],
17];
18
1922232425
26function array_search_keys ($search, array $array)
27{
28 $key = array_key_exists($search, $array) ? $search : false;
29 $keys = [];
30
31 if ($key === false) {
32 foreach ($array as $k => $v) {
33 if (is_array($v) && null !== $r = array_search_keys($search, $v)) {
34 $keys = [$k, $r];
35 break;
36 }
37 }
38 $key = count($keys) ? implode('.', $keys) : false;
39 }
40
41 return $key === false ? null : $key;
42}
43
4447484950
51function array_get (array $array, $key)
52{
53 if (array_key_exists($key, $array)) {
54 return $array[$key];
55 }
56
57 foreach (explode('.', $key) as $k) {
58 if (array_key_exists($k, $array)) {
59 $array = $array[$k];
60 }
61 }
62
63 return $array;
64}
65
6669707172
73function array_set (array &$array, $key, $value = null)
74{
75 $keys = explode('.', $key);
76
77 while (count($keys) > 1) {
78 $key = array_shift($keys);
79
80 if (! isset($array[$key]) || ! is_array($array[$key])) {
81 $array[$key] = [];
82 }
83
84 $array =& $array[$key];
85 }
86
87 $array[array_shift($keys)] = $value;
88}
89
90
91$Arr = [];
92
93foreach ($clumnArr as $search) {
94 $key = array_search_keys($search, $recipeArr);
95 $value = array_get($recipeArr, $key);
96 array_set($Arr, $key, $value);
97}
98
99echo '<pre>';
100print_r($Arr);
101echo "\n";
102echo '</pre>';