【问题标题】:PHP: set a (deep) array key from an arrayPHP:从数组中设置一个(深)数组键
【发布时间】:2019-12-03 03:07:25
【问题描述】:

是否有一个 PHP 函数可以从一个数组创建一个(深)数组键? 这很难解释,看那个例子:

function mysterious_function($input,$keys,$value){
    //...
    return $output;
}

$array = array(
    'hello'=>array(
        'im'=>'okay'
    )
);

$array = mysterious_function($array,array('hello','youre'),'beautiful');
$array = mysterious_function($array,array('ilove','the'),'haircut');

//would output

array(
    'hello'=>array(
        'im' =>         'ok',
        'youre' =>      'beautiful',
    ),
    'ilove'=>array(
        'the' =>        'haircut'
    )
);

【问题讨论】:

  • 用于输出 JSON 的反馈函数。我希望能够用键“格式化”响应,它们可能有任何深度。
  • 我认为这应该可以回答你的问题:stackoverflow.com/questions/27929875/…
  • 请展示一个更具挑战性的深度演示,您发布的示例太浅,无法表达您潜在的复杂性。整个数组中的所有键都是唯一的吗?每个后代分支的键是唯一的吗?如果某个键已经存在,是要覆盖该值,还是创建一个新的索引子数组以便保留旧数据和新数据?
  • 递归:参见递归。

标签: php arrays recursion search multidimensional-array


【解决方案1】:

我不知道这是否可以帮助你:

function mysterious_function($array,$keys,$value){
    
    $stack = "";
    foreach($keys as $k){
        $stack .= "['{$k}']";
    }
    eval("\$array{$stack} = \$value;");
    
    return $array;
    
}

是的,这很残酷:-D

演示: http://sandbox.onlinephpfunctions.com/code/3091e831982df4f4fafca6f7e1fd05c31cdee526

编辑:

eval() 通常是邪恶的。通常还有另一种方法可以做到这一点。顺便说一句,我希望这可以帮助你。

【讨论】:

  • 很酷!但请注意:“eval() 语言结构非常危险,因为它允许执行任意 PHP 代码。因此不鼓励使用它。如果您已仔细验证存在除了使用此构造之外别无选择,请特别注意不要将任何用户提供的数据传递到其中,而无需事先正确验证。”也许还有其他选择?
  • 我同意你的看法@showdev。通常eval() 是邪恶的,但有时它可能有用。我不知道这是否真的可以帮助某人,但我不明白downvote。
  • 投反对票不是我的。但这是一个有趣的概念,如果可能的话,我仍然认为值得寻找 eval() 的替代品。
  • 反对票来自我(我没有时间发表评论,因为我不得不下车),原因有两个:1. eval() 应该是 Z 计划,只有在 A 计划之后才接受通过 Y 计划已被证明是失败的。 2.您的演示有效,因为发布的示例数据非常宽容。事实上,这个问题还没有得到充分发展,并且没有充分暴露应用程序中数据结构的可变性/复杂性。我觉得你的 sn-p 比“在野外”成功更容易失败。出于这些原因,我不建议开发人员使用这种技术并相应地投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 2018-06-07
  • 2010-11-17
相关资源
最近更新 更多