关联数组中的PHP三元语句来设置键和值?

Posted

技术标签:

【中文标题】关联数组中的PHP三元语句来设置键和值?【英文标题】:PHP Ternary statement within Associative Array to set both key & value? 【发布时间】:2015-04-07 08:23:53 【问题描述】:

我已经搜索和测试了一段时间,只是找不到我想要完成的事情是否可以按照我的方式进行。

我想在定义数组时基于三元语句向数组添加键/值对。

Array(
    'Item 1' => 'Some value',
    (FALSE)? NULL : 'Item 2' => 'Another Value'
)

我的预期/想要的行为是结果是:

Array (
  [Item 1] => Some value
  [Item 2] => Another Value
)

当陈述为真时:

Array(
    'Item 1' => 'Some value',
    (TRUE)? NULL : 'Item 2' => 'Another Value'
)

产量:

Array (
  [Item 1] => Some value
)

但是我得到了:

Array (
  [Item 1] => Some value
  [] => Another Value
)

这会导致问题,因为 A)我不希望第二个元素首先存在,B)将 False 条件值分配给 True 条件值(在本例中为 NULL,它将键设置为 NULL [ ])

这很奇怪。我唯一的选择是有一个标准的 if() 语句并在条件为假时将元素弹出(通过使用!)到数组中?

注意:第 2 项的值为空是不可接受的,如果初始条件为真,则根本不应该存在任何元素。

任何帮助将不胜感激!

【问题讨论】:

99% 确定这是不可能的,也就是说,您需要使用 if。我会再考虑一下,看看我能不能做得更好。 不可能。要么将元素添加到数组中,要么不添加;没有办法像这样有条件地做到这一点。无论如何,使用if 语句到底有什么问题......?它完美地完成了这项工作(有些人甚至会说它比三元更直观)。 它实际上是is possible,但你通常不想这样做。 /cc @奥斯汀 【参考方案1】:

你对三元运算符所做的只是决定键名。无论如何,该元素都会被放入数组中,它就在数组字面量声明中。

使用内联表达式可以做的最好的事情是这样的:

['foo' => 'bar'] + (true ? [] : ['baz' => 42])

实际上,你应该写得更好:

$arr = ['foo' => 'bar'];
if (true) 
    $arr['baz'] = 42;

编写更紧凑的代码并不总是最好的目标,首先它需要可读性和可理解性。

【讨论】:

因为这是在 php-5.3 下标记的,最好不要使用仅在 5.4+ 中可用的短数组语法。但答案仍然是正确的。 谢谢,我用了第二种方法,代码仍然读得干净! “无论如何”是这里的重点。你可以让它失败:***.com/a/29327671/367456 :) @MáximaAlekz 如果你暗示不可读的版本更快:它不是。其次,谷歌和 Facebook 都在大力投资自己的语言和/或编译器;他们正在解决编译器级别的性能问题,而不是代码级别(很明显)。此外,鉴于两家公司都拥有庞大的团队规模和代码库,我相信可维护性(包括可读性)对他们来说非常重要。【参考方案2】:

只有通过使语句无效才能实现。

例如,您为 PHP 无法处理的键(例如数组)获取一个值,并且当您不想添加条目时,您使用该键。

原理实际上类似于您使用NULL 值概述的内容:

Array(
    'Item 1' => 'Some value',
    TRUE ? array() : 'Item 2' => 'Another Value'
)

这样做的缺点是代码庞大,阅读不清晰并给出警告:

警告:非法偏移类型

所以为了完整起见,我添加了更多这个答案。

完整示例 (online demo):

<?php
/**
 * PHP Ternary statement within Associative Array to set both key & value?
 * @link http://***.com/a/29327671/367456
 */

var_dump(
    Array(
        'Item 1'                   => 'Some value',
        TRUE  ? array() : 'Item 2' => 'Another Value',
        FALSE ? array() : 'Item 3' => 'Just Another Value',
    )
);

【讨论】:

这真的很神奇,即使你永远不应该这样做。

以上是关于关联数组中的PHP三元语句来设置键和值?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 数组Array

打印嵌套数组关联数组php

php,数组

PHP学习四--数组

PHP中数组的定义及声明实例

如何在 Bash 中迭代关联数组