用三元运算符php改进foreach之前的is_数组语句

用三元运算符php改进foreach之前的is_数组语句,php,arrays,foreach,ternary-operator,Php,Arrays,Foreach,Ternary Operator,我有 我想缩短代码,因为我们都知道,在获取数组值之前,我们正在验证它是否为数组 那么,缩短时间的正确方法是什么呢 if ( is_array($this->input->post("tolerance")) ) foreach($this->input->post("tolerance") as $tolerance) $tolerances .= $tolerance . " " ; else $tolerances =

我有

我想缩短代码,因为我们都知道,在获取数组值之前,我们正在验证它是否为数组

那么,缩短时间的正确方法是什么呢

if ( is_array($this->input->post("tolerance")) )
   foreach($this->input->post("tolerance")  as $tolerance) 
           $tolerances      .= $tolerance . " " ;
else
    $tolerances = 'Not defined';

在保留
foreach
的同时,您应该/不能缩短此长度。三元运算符不是这样使用的。它用于表达式,而不是语句

好例子:

is_array($this->input->post("tolerance")) ? foreach($this->input->post("tolerance") as tolerance)  $tolerances .= $tolerance . " " : $tolerances = 'Not defined';
$foo = xyz() ? 'foo' : 'bar';
坏例子:

is_array($this->input->post("tolerance")) ? foreach($this->input->post("tolerance") as tolerance)  $tolerances .= $tolerance . " " : $tolerances = 'Not defined';
$foo = xyz() ? 'foo' : 'bar';
更糟糕的示例(语法错误):


缩短代码的唯一正确方法是使用临时变量和
内爆
,而不是循环:

is_array($foo) ? foreach($foo as $bar) ...

在这种情况下,三元运算符非常好,因为现在您在then/else部分中只有一个表达式而不是语句。

您应该/不能在保留
foreach
的同时缩短它。三元运算符不是这样使用的。它用于表达式,而不是语句

好例子:

is_array($this->input->post("tolerance")) ? foreach($this->input->post("tolerance") as tolerance)  $tolerances .= $tolerance . " " : $tolerances = 'Not defined';
$foo = xyz() ? 'foo' : 'bar';
坏例子:

is_array($this->input->post("tolerance")) ? foreach($this->input->post("tolerance") as tolerance)  $tolerances .= $tolerance . " " : $tolerances = 'Not defined';
$foo = xyz() ? 'foo' : 'bar';
更糟糕的示例(语法错误):


缩短代码的唯一正确方法是使用临时变量和
内爆
,而不是循环:

is_array($foo) ? foreach($foo as $bar) ...
在这种情况下,三元运算符是非常好的,因为现在您在then/else部分中只有一个表达式而不是语句。

尝试使用
内爆()
,如下所示:

$tolerance = $this->input->post('tolerance');
$tolerance = is_array($tolerance) ? implode(' ', $tolerance) : 'Not defined';
尝试使用
内爆()
,如下所示:

$tolerance = $this->input->post('tolerance');
$tolerance = is_array($tolerance) ? implode(' ', $tolerance) : 'Not defined';

我想不出有什么好办法,但要小气点,做一个:

$tolerances = ( is_array($this->input->post("tolerance")) == false ) ? "Not defined" : implode(" ", implode($this->input->post("tolerance"))) ;
我知道,大多数人认为这是不好的做法

使用foreach的另一个选项是:

/* @ == ignore expected warning, $r == assign on testing */
$tolerances = ($r = @implode(' ', $this->input->post("tolerance")) ) ? $r : 'Not defined';

遵循“坏习惯”的理念:如果可能的话,就应该这样做。

我想不出任何好的方法来做到这一点,但要小心谨慎,做一件事:

$tolerances = ( is_array($this->input->post("tolerance")) == false ) ? "Not defined" : implode(" ", implode($this->input->post("tolerance"))) ;
我知道,大多数人认为这是不好的做法

使用foreach的另一个选项是:

/* @ == ignore expected warning, $r == assign on testing */
$tolerances = ($r = @implode(' ', $this->input->post("tolerance")) ) ? $r : 'Not defined';

遵循“坏习惯”的哲学:如果可能的话,它是注定的。

有没有办法缩短这个时间?好吧,你可以保留每种。。请参阅我的帖子(将其包装为call\u user\u func()调用),有没有办法缩短它?好吧,您可以保留每种。。请参阅我的帖子(将其包装为call\u user\u func()调用)使用较短的变量名。严肃地说:不要缩短它,你将永远无法再次阅读和理解你的代码。小心:拥有可读的代码比“缩短”的代码要好——我觉得在这里收获很少…-我也会为代码块添加一些大括号-只是为了让它非常清楚…为什么要缩短代码?它不是按原样工作吗?此外,我发现缺少大括号是一种不好的做法,如果使用短的变量名,代码可读性更高。严肃地说:不要缩短它,你将永远无法再次阅读和理解你的代码。小心:拥有可读的代码比“缩短”的代码要好——我觉得在这里收获很少…-我也会为代码块添加一些大括号-只是为了让它非常清楚…为什么要缩短代码?它不是按原样工作吗?另外,我发现缺少大括号是一种不好的做法,如果你使用它们,代码的可读性会更高。
==false
==true
在处理布尔型时真的很可怕。
==false
==true
在处理布尔型时真的很可怕