PHP中的简写IF语句

PHP中的简写IF语句,php,arrays,if-statement,ternary,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

我想知道是否有可能做到以下几点。我希望我在下面写的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.
如果可能的话,有什么想法吗

请试试这个:

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

IMO这样的微优化将使您的代码不可读,如果字符串中不包含
,则在尝试读取该数组索引时,您将获得
未定义索引

如果您不能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
?>

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

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

$string = (sizeof($string) >= 2 ? $string[1] : null);
另一个解决办法是:

正如虫族所说,这是一个丑陋的解决方案,也是一个糟糕的做法,因为你没有太多的控制权(因为它忽略了任何级别的错误、注意等)。所以,避免它

对于
if
问题。我个人认为,使用你使用的方式是非常好的,它更干净,更容易理解。不管怎样,使用三元结构,您可以使用以下内容:

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


三元运算符不是if的简写形式。您对三元运算符感到困惑,字符串中的
(您的
$\u POST
)没有特殊含义“我希望我在下面编写的if语句在一行中”-因为?那么,缩写if语句的名称是什么?每次发现字符“:”时,我都会分解字符串$\u POST。就我而言,永远只有一个“:”。我其实只是想说“这就是我们想要的”。然后将其添加到数组中的键。@Alex:没有缩写
if
语句。三元运算符甚至不接近
如果
你可以省略
list()中的第一个变量
--
list(,$string)
PS:不是关于这个确切的答案(非常正确,+1),而是关于OP:这个解决方案很糟糕。原始代码的可读性是原来的百万倍,很好的解决方案。。。比我的要好得多(除了$u POST['data']的健全性之外)。。。但是我仍然不明白如果
的话会有什么问题。我想到了这个:
$foo=isset($\u POST['data'])&&(list($want,$dontwant)=explode(“:”,$\u POST['data'])$dontwant:null
@Alex:如果
$foo
用于什么呢?删除三元运算符表达式周围的额外括号并在那里添加几个空格-这将是一个理想的答案
$test=$string$string=explode(“:”,$string)和$string[1]:NULL但这只能告诉我是真是假。@Alex:-请最后阅读正确语法的文档。编写随机代码并期望它工作不是一个好主意,所以在这种情况下我应该避免使用三元代码,因为它没有意义。为什么互联网上的每个人都说这是一个简写的if语句呢。我的行为就像一个假想。但只能在真实或错误的环境中使用。对吗?@Alex ternary可以定义变量,比如
$name=isset($\u POST['name'])$_POST['name']:空
以避免出现未定义的变量警告,并且在大多数情况下可以缩短初始定义阶段的代码,但是如果您想对字符串进行逻辑/操作,比如通过函数传递字符串,那么它并不真正适合,并且可能会导致相同操作的代码量相同,但稍微不可读。别误会我,我爱他们。。。my2cent“一个简单的解决方案是忽略错误:”--1,
s/simple/dumby/
My字符串将始终包含“:”前面和后面都有数据,因为用户无论如何都不能影响它。@zerkms,这就是为什么我给出了一个更好的解决方案。你都看过了吗?@Alex,你确定吗?似乎这是一个POST数据,人们总是可以通过HTTP POST发送他/她想要的任何东西。在验证的情况下,您可以先检查它,如果错误,则向用户显示一个错误。@Matheus de Oliveira:我确实读过。但是
@
甚至不值得提及。我甚至没有说你先提到它,然后贴上“简单”的标签
$string = (isset($_POST['data']) ? explode(':', $_POST['data'], 2) : null);
$string = ($string != null && sizeof($string) >= 2 ? $string[1] : null);