PHP:从数组中设置(深)数组键

is there a PHP function that would create a (deep) array key from an array ? It's quite difficult to explain, see that example:

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'
    )
);
doujianwan7570
doujianwan7570 递归:请参阅递归。
大约一年之前 回复
dpf25323
dpf25323 请展示更具挑战性的深度演示,您发布的样本太浅,无法表达您的潜在复杂性。整个阵列中的所有键都是唯一的吗?每个后代分支的键是唯一的吗?如果密钥已存在,是否要覆盖该值,或者创建新的索引子数组以便保留旧数据和新数据?
大约一年之前 回复
dpfqy5976
dpfqy5976 我想这应该可以回答你的问题:stackoverflow.com/questions/27929875/...
大约一年之前 回复
douhuan3448
douhuan3448 这是一个输出JSON的反馈函数。我希望能够用键“格式化”响应,它们可能有任何深度。
大约一年之前 回复

1个回答



我不知道这是否可以帮到你:</ p>

  function mysterious_function(  $ array,$ keys,$ value){

$ stack =“”;
foreach($ keys as $ k){
$ stack。=“['{$ k}']”;
}
eval(“\ $ array {$ stack} = \ $ value;”);

返回$ array;

}
</ code> </ pre>

是的,它是残酷的:-D </ p>

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

编辑:</ h1>

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

展开原文

原文

I don't know if this could help you:

function mysterious_function($array,$keys,$value){

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

    return $array;

}

Yes, it's brutal :-D

Demo: http://sandbox.onlinephpfunctions.com/code/3091e831982df4f4fafca6f7e1fd05c31cdee526

Edit:

Often eval() is evil. Often there is another way to do this; by the way I hope this could help you.

dtmjl4427
dtmjl4427 downvote来自我(我没有时间发表评论,因为我不得不下车)有两个原因:1。eval()应该是Z计划,只有在计划A到计划Y之后才被证实失败 。 2.您的演示有效,因为发布的样本数据非常宽容。 事实上,问题是不发达的,并没有充分暴露应用程序中数据结构的可变性/复杂性。 我觉得你的片段更容易失败,而不是“野外”的成功。 出于这些原因,我不建议开发人员使用这种技术并进行相应的投票。
大约一年之前 回复
dongluedeng1524
dongluedeng1524 Downvote不是我的。 但这是一个有趣的概念,我仍然认为如果可能的话,找到eval()的替代方案可能是值得的。
大约一年之前 回复
dtgj8529
dtgj8529 我同意你@showdev。 通常eval()是邪恶的,但有时它可能是有用的。 我不知道这是否真的可以帮助别人,但我不理解downvote。
大约一年之前 回复
dongqing8765
dongqing8765 太酷了! 但请注意:“eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证除了使用此构造之外没有其他选项,请特别注意不要 将任何用户提供的数据传递给它,而不事先正确验证它。“ 也许有另一种选择?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐