0

我很困惑为什么这段代码:

$mapped_class = ( $mapped_field_index = array_search( $field_name, $automapped_header ) !== false ) ? " mapped mapped_to-" . $mapped_field_index : "";

... 始终1$mapped_field_index(适用时)返回

鉴于此,扩展代码:

$mapped_field_index = array_search( $field_name, $automapped_header );
$mapped_class = $mapped_field_index !== false ? " mapped mapped_to-" . $mapped_field_index : "";

... 将正确的搜索索引显示为$mapped_field_index.

我认为在 PHP 中,IF 上下文中的赋值也被评估为表达式并返回分配的值。这在这两个例子中似乎都是正确的,因为在没有结果$mapped_class的情况下是空白的。array_search()

但我希望在这两种情况下都$mapped_field_index包含正确的array_search()索引,而不是仅仅1以三元形式(这似乎表明 TRUE 而不是实际的索引)。

三元运算符在这里有贡献吗?

4

2 回答 2

1

$mapped_field_index在这两种情况下没有被设置为相同的值。在第一个示例中,$mapped_field_index等于

array_search( $field_name, $automapped_header ) !== false

在第二个例子中,它相当于

array_search( $field_name, $automapped_header )

如果您修改第二个示例,则第一行显示为:

$mapped_field_index = array_search( $field_name, $automapped_header ) !== false;

那么在这种情况下你也总是会得到 1 。

在这种没有效率差异的情况下,你最好使用更冗长但更易读的语法。

于 2012-11-30T18:44:36.953 回答
0

比较运算符的优先级高于赋值。见http://php.net/manual/en/language.operators.precedence.php

(您的 !== 子句在您的 = 子句之前分组)

尝试像这样添加括号(不是 100% 确定它会起作用,但它可能会)

$mapped_class = ( ($mapped_field_index = array_search( $field_name, $automapped_header )) !== false ) ? " mapped mapped_to-" . $mapped_field_index : "";
于 2012-11-30T18:24:15.997 回答