2 つの連想配列があります。1 つは州 (または州) に関するデータで、もう 1 つは異なる国に関するデータです。リレーショナル データベースから値を取得しているため、states 配列には国名ではなく国 ID が保持されます。
状態配列:
array(3) {
array {
'name' => 'Alabama',
'country' => 1},
array {
'name' => 'Alberta',
'country' => 2},
array {
'name' => 'Minnesota',
'country' => 1}
}
国配列:
array(2) {
1 => 'United States',
2 => 'Canada'
}
私が望む結果は次のとおりです。
array(3) {
array {
'name' => 'Alabama',
'country' => 'United States'},
array {
'name' => 'Alberta',
'country' => 'Canada'},
array {
'name' => 'Minnesota',
'country' => 'United States'}
}
検索して検索しましたが、この特定の問題に答える質問が見つかりませんでした。このようなデータを持っているのは私だけではないと確信しています。多分私は正しい用語を探していません。これを解決するために国のモデルクラスに関数を書きましたが、もっと効率的な方法が必要だと思います。
私の現在の解決策(うまくいきますが、おそらくもっと良い方法がありますよね?):
function replaceKeyValues($replaceArray,$replaceKey)
{
$countries = $this->get_countries();
foreach ($replaceArray as &$itm) {
if (isset($itm[$replaceKey])) {
if (in_array($itm[$replaceKey], array_flip($countries))) {
$itm[$replaceKey] = $countries[$itm[$replaceKey]];
}
}
}
return $replaceArray;
}
//called like this (for example)
$states = $this->Country->replaceKeyValues($states,'country');
編集: Jonの提案を使用することになり、元の関数をわずかに変更して、モデルクラスでもう必要ないほど十分に汎用的にしました。これはヘルパー クラスの 1 つになり、「マスター データ」配列である別の入力パラメーターを追加しました。うまくいけば、これは誰かを助ける:-)
function replaceKeyValues($masterArray,$replaceArray,$replaceKey)
{
foreach ($replaceArray as &$itm) {
if (isset($itm[$replaceKey])) {
if (isset($masterArray[$itm[$replaceKey]])) {
$itm[$replaceKey] = $masterArray[$itm[$replaceKey]];
}
}
}
return $replaceArray;
}