我有一段代码,其中变量可以是数组,也可以只是字符串。
if(!is_array($relation['display_name']))
{
// do something with $relation['display_name']
}
else
{
foreach($relation['display_name'] as $display_name)
{
// do the same with $display_name
}
}
这当然有效 - 但不是很好。而且我必须做很多次。有没有更好的方法呢?
答案 0 :(得分:7)
你可以这样做:
foreach((array)$relation['display_name'] as $display_name) {
// do something with $display_name
}
答案 1 :(得分:5)
你可以这样做:
if(!is_array($relation['display_name'])) {
$relation['display_name'] = array($relation['display_name']);
}
# do your foreach here
答案 2 :(得分:1)
我建议你研究解决问题的根源。
为什么$relation['display_name']
有时候是一个数组,有时候不是?
问题修复比修补结果更好。
话虽如此,我会创建以下内容:
function transformToArray($mValue) {
return (is_array($mValue)) ? $mValue : array($mValue);
}
答案 3 :(得分:1)
你可以用三元运算符写得更短:
foreach ((is_array($a) ? $a : array($a)) as $val) {
...
}
答案 4 :(得分:0)
我认为这不是处理这个问题的坏方法。我见过的大多数PHP代码处理类似的东西。
答案 5 :(得分:0)
如果使用> = PHP 5.3,您可以尝试这样的事情。如果元素是单数或隐式地在所有数组成员(如果是数组)上,它将运行元素上的代码。
function call($element, $func) {
if (is_array($element)) {
foreach($element as $value) {
$func($value);
}
} else {
$func($element);
}
}
call($relation['display_name'], function($display_name) {
// Anything you wanna.
});