これは、コメントで求めたコード例です。これがうまくいかない場合は、この回答を削除できるようにお知らせください。
<?php
$mycodes = explode(',', $row['SUBDIVISION']);
$arr = array('Upper Captiva' => 'Captiva');
$printedsomething = false;
foreach($mycodes as $code) {
if ( !empty($arr[$code]) ) {
/*******************************
* This would be your original code refactored.
$mycodes should probably be $arr[$code] */
echo $printedsomething ? ', ' . $arr[$code] : $mycodes;
/*******************************/
$printedsomething = true;
}
} //end for loop
?>
しかし、私はこれがあなたが望むものだとは思いません。私が理解している限り、コードのいずれかがに含まれているかどうかを確認$arr
し、含まれている場合は、コンマで区切ってエコーアウトします。
配列をエコーアウトできないという事実($mycodes
)(そこに出力したかったと思います$arr[$code]
)に加えて、おそらくもっと洗練された方法があります。それは、ループの前に空の結果配列を定義することです。
$results = array();
次に、関連する値をそこに入れることができるので、星の間のコードは次のようになります。
$results[] = $arr[$code];
したがって、ループの後にこれを行うことができます。
implode(', ', $results);
したがって、最終的なコードは次のようになります。
<?php
$mycodes = explode(',', $row['SUBDIVISION']);
$arr = array('Upper Captiva' => 'Captiva');
$results = array();
foreach($mycodes as $code) {
if ( !empty($arr[$code]) ) {
$results[] = $arr[$code];
}
}
echo implode(', ', $results);
?>
もう1つの、さらに洗練されたアプローチは、PHPが提供する無数の配列関数のいくつかを使用することです。たとえば、個別のコードのみを出力し、それらを別の配列でフィルタリングする場合は、array_flip()を使用$mycodes
して値をキーに変換できます。その後、array_intersect_key()を使用して、に存在するキーのみをフィルタリングできます$arr
。このようにして、ループ全体とその出力を1行で表すことができます。
<?php
$mycodes = explode(',', $row['SUBDIVISION']);
$arr = array('Upper Captiva' => 'Captiva');
echo implode(', ', array_intersect_key($arr, array_flip($mycodes)));
?>
あなたのアレイがどのように見えるか正確にはわからないので、これがあなたのために働くかどうかはわかりません。また、これがあなたの要件を満たしているかどうかもわかりません。