这是您在评论中要求的代码示例。如果这不起作用,请告诉我,以便我删除此答案。
<?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);
?>
另一种更优雅的方法是使用 PHP 提供的无数数组函数中的一些。例如,如果您只想输出不同的代码并通过另一个数组过滤它们,您可以使用array_flip() on$mycodes
将值转换为键。之后,您可以使用array_intersect_key()仅过滤也存在于$arr
. 这样,您可以在一行中表达整个循环及其输出:
<?php
$mycodes = explode(',', $row['SUBDIVISION']);
$arr = array('Upper Captiva' => 'Captiva');
echo implode(', ', array_intersect_key($arr, array_flip($mycodes)));
?>
我不知道这是否适合您,因为我不确切知道您的阵列是什么样的。另外我不确定这是否符合您的要求。