0

私は持っている

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

配列値を取得する前に配列であるかどうかを確認していることは誰もが知っているので、コードを短くしたいと思います

では、これを短縮する正しい方法は何でしょうか?

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

4 に答える 4

3

を維持しながら、これを短縮する必要があります/短縮できませんforeach。三項演算子は、このように使用するためのものではありません。ステートメント用ではなく、式用です。

良い例え:

$foo = xyz() ? 'foo' : 'bar';

悪い例:

xyz() ? foo() : bar();

悪い例 (構文エラー):

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

implodeコードを短くする唯一の適切な方法は、ループの代わりに一時変数を使用することです。

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

この場合、ステートメントの代わりに then/else 部分に式があるだけなので、三項演算子はまったく問題ありません。

于 2013-04-09T15:54:34.763 に答える
2

implode()次のようにを試してください。

$tolerances = is_array($this->input->post("tolerance")) ? implode(' ', $this->input->post("tolerance")) : 'Not defined' ;
于 2013-04-09T15:56:25.207 に答える
0
$tolerances = ( is_array($this->input->post("tolerance")) == false ) ? "Not defined" : implode(" ", implode($this->input->post("tolerance"))) ;
于 2013-04-09T16:00:12.867 に答える