【问题标题】:Merge 2 associative arrays in one without breaking the structure在不破坏结构的情况下将 2 个关联数组合并为一个
【发布时间】:2014-03-05 15:23:30
【问题描述】:

我有这个数组:

$request = array(
    'method' => 'Document.create',
    'params' => Array (

        'document' => Array ( SOME DATA

            ),

        'thirdaddress' => Array ( SOME DATA

            ),
        'row' => Array (

            '1' => Array ( SOME DATA
            ),

            '2' => Array ( SOME DATA

            ),

            '4' => Array ( SOME DATA
            ),

        )
    )
);

我想在“2”和“4”键之间“注入”这个

'3' => Array (    SOME DATA

                ),

我想注入类似这样的结构:

$secondArray = array(
        'params'=>Array(
            'row'=> Array(
                '3' => Array (    SOME DATA

                ),
            )   
        )       
    );

我试过这个:
1.$request['params']['row']['3']=$secondArray;
2.$request = array_merge($request,$secondArray);
3.$request = array_merge_recursive($request,$secondArray);

ksort 也不起作用..我的行被卡在最后一个地方.. 我做了一个

if(STATEMENT){ //$request = array_merge_recursive($request,$secondArray; //$request['params']['row']['3']=$secondArray['params']['row']['3']; $request['params']['row']['3']=$secondArray; ksort($request); } die(dump($request));

我哪里错了? 谢谢。

【问题讨论】:

  • $request['params']['row']['3']= array(SOME DATA)?
  • 不是最好的解决方案,但可以完成工作:$request['params']['row']['3'] = $secondArray['params']['row']['3']; 基于 Jon 的想法。
  • @Bobby 此代码将“3”放在数组的末尾:/
  • 哦,我没看到编辑。好的,现在我的代码不再有效 XD

标签: php arrays multidimensional-array associative-array array-merge


【解决方案1】:

对于简单地插入它,这应该可以工作 -

$request['params']['row']['3']  = Array(SOME DATA);
//This sorts the "row" keys - 
ksort($request['params']['row'], SORT_NUMERIC)

【讨论】:

  • 这段代码插入了是,但是在错误的地方,我需要'2'和'4'之间的'3'
  • @Azrael_404 您可以使用带有 sort_flag 作为 SORT_NUMERIC 的 ksort()。检查编辑。
【解决方案2】:

试试array_merge_recursive():

<?php
$request = array(
    'method' => 'Document.create',
    'params' => Array (

        'document' => Array ( SOME DATA

            ),

        'thirdaddress' => Array ( SOME DATA

            ),
        'row' => Array (

            '1' => Array ( SOME DATA
            ),

            '2' => Array ( SOME DATA

            ),

            '4' => Array ( SOME DATA
            ),

        )
    )
);

$secondArray = array(
    'params'=>Array(
        'row'=> Array(
            '3' => Array ('foo' => 'bar'),
        )   
    )       
);

$request = array_merge_recursive($request, $secondArray)

【讨论】:

  • 递归将 '3' 放在 $request 的末尾,而不是在 '2' 和 '4' 键之间
  • 您不能直接在“2”和“4”键之间插入“3”键。相反,您必须按照我建议的方式注入它,然后使用例如 ksort() 手动对生成的 $request['params']['row'] 数组进行排序。
  • 试试 ksort($request['params']['row'])
【解决方案3】:

有了第 1 点。你几乎已经很好了,你只需要这个改变。
而不是:

$secondArray = array(
    'params'=>Array(
        'row'=> Array(
            '3' => Array (    SOME DATA

            ),
        )   
    )       
);

试试这个:

$secondArray = array(SOME DATA);

【讨论】:

  • 和其他的一样,它把数组放在 $request 的末尾
  • 添加 ksort($request['params']['row']);然后。它按键排序,这正是您想要的。
猜你喜欢
  • 2013-06-19
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多