3重ループを使わない、効率的な方法について
解決したいこと
下記のようなデータがある場合に、どうすれば3重ループなどを使用せずに計算量を減らす方法で実現できるか知りたいです。
log(n^x)
にならない方法を模索しています。
例)
- 下記のように、
Array A
があるとします。
ArrayA
(
[0] => Array
(
[IdList] => Array
(
[0] => Array
(
[Id] => ID2
[A] => A
[B] => B
[C] => C
...
(
[1] => Array
(
[Id] => ID6
[A] => A
[B] => B
[C] => C
...
(
(
)
[1] => Array
(
[IdList] => Array
(
[0] => Array
(
[Id] => ID3
[A] => A
[B] => B
[C] => C
...
(
[1] => Array
(
[Id] => ID9
[A] => A
[B] => B
[C] => C
...
(
(
)
...
)
- IDに属する
Value
を保持している、別のArray B
も存在しています。(keyはID名となっています)
ArrayB
(
[ID1] => foo
[ID2] => bar
[ID3] => baz
)
やりたいこと
下記のようなデータに変更したいです。
もしArray B
に存在するId
が、Array A(ArrayA[i][IdList][j][Id])
に存在する場合は、マッチしたId
が存在するArrayA[i][IdList][j]
にValue
などとして挿入したいです。
Array
(
[0] => Array
(
[IdList] => Array
(
[0] => Array
(
[Id] => ID2
[A] => A
[B] => B
[C] => C
...
[Value] => bar
(
[1] => Array
(
[Id] => ID6
[A] => A
[B] => B
[C] => C
...
(
(
)
[1] => Array
(
[IdList] => Array
(
[0] => Array
(
[Id] => ID3
[A] => A
[B] => B
[C] => C
...
[Value] => baz
(
[1] => Array
(
[Id] => ID9
[A] => A
[B] => B
[C] => C
...
(
(
)
...
)
自分で試したこと
下記のようにすれば可能だと思うのですが、他にもし効率のよい方法があればぜひ知りたいと思いました。
foreach($arrayA as $i => $data) {
foreach($arrayA[$i] as $j => $id) {
foreach($arrayB as $key => $value) {
if($id === $key) {
arrayA[$i]['IdList'][$j]['Value'] = $value;
}
}
}
}
0