在这种情况下我不确定是否可以使用array_intersect或array_search

时间:2015-06-30 18:34:41

标签: php arrays if-statement operators

我有一个数组($entry),它可以有两组密钥:

"custom_0_first" AND "custom_0_last";

OR

"custom_1_first" AND "custom_1_last";

我尝试执行以下操作,但它似乎没有设置变量:

$firstname = array_search('custom_0_first', $entry) || array_search('custom_1_first', $entry);
$lastname = array_search('custom_0_last', $entry) || array_search('custom_1_last', $entry);

请注意$entry['custom_0_first']确实可以正常工作。我试图在这里避免使用IF语句。

我对array_search或PHP如何工作的理解不正确?据我了解,如果第一个array_search找不到密钥,则函数返回FALSE,然后它将检查OR语句的右侧。这是不正确的?我看到array_intersect我认为可能有用,但看起来它不适用于带有关联键的数组。

2 个答案:

答案 0 :(得分:2)

与JavaScript不同,||运算符始终返回布尔值。将其替换为?:运算符。

$a ?: $b实际上是$a ? $a : $b的简短语法,请参阅ternary operator

  

如果(expr1) ? (expr2) : (expr3)评估为expr2,则expr1表达式评估为TRUE;如果expr3评估为expr1,则表达式FALSE

     

从PHP 5.3开始,可以省略三元运算符的中间部分。如果expr1 ?: expr3评估为expr1,则表达式expr1会返回TRUE,否则会返回expr3

答案 1 :(得分:2)

您可以使用array_intersect_key来获取您正在寻找的值。它返回一个数组。您可以使用reset获取结果数组的第一个(理论上唯一的)元素。它将给出严格的标准通知“只有变量应该通过引用传递”,但它会起作用。

$first = reset(array_intersect_key($entry, ['custom_0_first' => 0, 'custom_1_first' => 0]));
$last = reset(array_intersect_key($entry, ['custom_0_last' => 0, 'custom_1_last' => 0]));

另一种方法是使用isset检查密钥。

$first = isset($entry['custom_0_first']) ? $entry['custom_0_first'] : $entry['custom_1_first'];
$last = isset($entry['custom_0_last']) ? $entry['custom_0_last'] : $entry['custom_1_last'];