我有一个数组,我正在尝试改变输出,如果找到一个特定的字符串。
如下所示,当条件发生时,它成功地将Upper Captiva更改为Captiva但忽略了我的else语句,如果条件没有发生,它应该只显示$ row ['SUBDIVISION']值。
我尝试将$ mycodes和$ row ['SUBDIVISION']添加到else行,没有运气。
<?php
$mycodes = explode(",", $row['SUBDIVISION']);
$arr = array( "Upper Captiva" => "Captiva",);
$printedsomething=0;
foreach($mycodes as $code) {
if ($arr[$code] != '' ) {
if ($printedsomething==1) echo ", " . $arr[$code];
else echo $mycodes;
$printedsomething=1;
}
} //end for loop
?>
答案 0 :(得分:1)
这是您在评论中要求的代码示例。如果这不起作用,请告诉我,以便我可以删除此答案。
<?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提供的一些无数的数组函数。例如,如果您只想输出仅限您的不同代码并通过其他数组进行过滤,则可以在$mycodes
上使用array_flip()以将值转换为键。之后,您可以使用array_intersect_key()仅过滤$arr
中也存在的键。这样,您可以将整个循环及其输出表示为一行:
<?php
$mycodes = explode(',', $row['SUBDIVISION']);
$arr = array('Upper Captiva' => 'Captiva');
echo implode(', ', array_intersect_key($arr, array_flip($mycodes)));
?>
我无法判断这是否对您有用,因为我不确切知道您的数组是什么样的。此外,我不确定这是否符合您的要求。