PHP中的速记IF语句

时间:2013-02-19 23:59:42

标签: php arrays if-statement ternary

我想知道以下是否可行。我希望下面写的if语句在一行中(三元组)。

我想在cURL数组中使用三元(简写php代码)。

表单数据示例:

$_POST['data'] = 'sometextrighthereisgood:this is what we want"; //user input example.

如果声明:

if(isset($_POST['data']))
{
$string = explode(':', $_POST['data']);
$string = $string[1]; //contains "this is what we want"
}
else
{
$string = NULL;
}

数组示例:

$arr = array('text' => $string); //example for use in the array.

任何想法是否可能?

亲切的问候Alex

3 个答案:

答案 0 :(得分:2)

试试这个:

list(,$string) = isset($_POST['data']) 
               ? explode(':', $_POST['data']) 
               : array(null,null)
               ;

答案 1 :(得分:1)

像这样的IMO微优化将使您的代码不可读,如果字符串中不包含:会发生什么,那么当您尝试从该数组索引读取时,您将获得Undefined index

如果您不是100%确定某个值是您所期望的,则需要检查它。你可以做三分检查但值得吗?

<?php
$data = 'sometextrighthereisgood:this is what we want';

if(isset($data)){
    $string = explode(':',$data);
    $string = isset($string[1]) ? $string[1] : NULL;
}else{
    $string = NULL;
}
echo $string; //this is what we want
?>

答案 2 :(得分:0)

您的代码存在一个问题。爆炸后,如果原始字符串中没有“:”,PHP可能会在该行显示通知或错误:

$string = $string[1]

可能未定义$string[1]。因此,您可以在分配之前进行检查:

$string = (sizeof($string) >= 2 ? $string[1] : null);

其他解决方案,是ignore the notice message

$string =@ $string[1]

正如zerkms所说,这是一个丑陋的解决方案和一个不好的做法,因为你没有太多的控制(因为它忽略任何级别的错误,注意等)。所以,避免它。

并且,对于if问题。我个人认为使用您使用的方式非常好,它更清晰,更容易理解。无论如何,使用三元数你可以使用类似的东西:

$string = (isset($_POST['data']) ? explode(':', $_POST['data'], 2) : null);
$string = ($string != null && sizeof($string) >= 2 ? $string[1] : null);