PHP String Concatenation(一个来自变量,另一个来自三元opeartor)给出了意想不到的结果

时间:2015-08-20 06:29:41

标签: php string

我通过示例描述问题: 让,

svn export URL-to-the-project

我按照以下方式连接上述变量。

public static void Copy(string sourceDir, string targetDir)
{
    Directory.CreateDirectory(targetDir);        
    foreach(var file in Directory.GetFiles(sourceDir))
        File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)),true);

    foreach(var directory in Directory.GetDirectories(sourceDir))
        Copy(directory, Path.Combine(targetDir, Path.GetFileName(directory)));
}

当我打印$actual_food['Food']['name'] = 'Tea'; $actual_food['Food']['s_name'] = 'Local'; 时,输出就像' - 本地'但不打印$food_name = $actual_food['Food']['name']." ".!empty($actual_food['Food']['s_name']) ? "- ".$actual_food['Food']['s_name'] : ""; 内容。

我认为这个问题有点傻,但我的好奇心想知道。提前谢谢。

2 个答案:

答案 0 :(得分:3)

使用三元运算符时需要注意连接。您可以尝试

$food_name = ($actual_food['Food']['name'])." ".(!empty($actual_food['Food']['s_name']) ? "- ".$actual_food['Food']['s_name'] : "");
echo $food_name;// Tea - Local

在这里,我已将变量括在括号()

因为我们称之为operator precedence。如果我们不将三元运算符括在括号内,那么您的代码将被解释为

($actual_food['Food']['name'] . " " . !empty($actual_food['Food']['s_name']) ?...;

因此,您只需将三元运算符括起来以获得正确的解释

答案 1 :(得分:0)

尝试

$actual_food['Food']['name'] = 'Tea';
$actual_food['Food']['s_name'] = 'Local';

$food_name = !empty($actual_food['Food']['s_name']) ? $actual_food['Food']['name']." - ".$actual_food['Food']['s_name'] : $actual_food['Food']['name'];

echo $food_name;

OR

()条件之前和之后添加!empty,如

 $food_name = $actual_food['Food']['name']." ".(!empty($actual_food['Food']['s_name']) ? "- ".$actual_food['Food']['s_name'] : "");