-1

我想知道以下是否可能。我希望我在下面写的 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.

如果可能的话,有什么想法吗?

亲切的问候亚历克斯

4

3 回答 3

2

试试这个:

list(,$string) = isset($_POST['data']) 
               ? explode(':', $_POST['data']) 
               : array(null,null)
               ;
于 2013-02-20T00:04:30.563 回答
1

像这样的 IMO 微优化将使您的代码不可读,如果:字符串中不包含 no 会发生什么,那么您将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
?>
于 2013-02-20T00:12:42.817 回答
0

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

$string = $string[1]

因为$string[1]可能没有定义。因此,您可以在分配之前检查它:

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

其他解决方案是忽略通知消息

$string =@ $string[1]

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

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

$string = (isset($_POST['data']) ? explode(':', $_POST['data'], 2) : null);
$string = ($string != null && sizeof($string) >= 2 ? $string[1] : null);
于 2013-02-20T00:19:29.017 回答