我有一个数组($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
我认为可能有用,但看起来它不适用于带有关联键的数组。
答案 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'];