【问题标题】:Insert multiple arrays in specific multidimensional array location with associated key在具有关联键的特定多维数组位置插入多个数组
【发布时间】:2020-05-06 19:14:50
【问题描述】:

如果你有两个随机键数的数组:

$array1 = array(
  'one' => 'a',
  'two' => 'b',
);
$array2 = array(
  'minusone' => 'e',
  'zero' => 'd',
  'one' => 'a',
  'two' => 'b',
);

然后想插入这两个数组:

$insert_1 = array( 'hello' => 'x' );
$insert_2 = array( 'world' => 'y' );

但是你需要把它们放在一个非常具体的地方,而且你不知道数字键的位置,对于这个例子,假设在键“一”和“二”之间,这样原始数组的最终结果是:

 $array = array(
      'one' => 'a',
      'hello' => 'x',
      'world' => 'y',
      'two' => 'b',
);
$array2 = array(
  'minusone' => 'e',
  'zero' => 'd',
  'one' => 'a',
  'hello' => 'x'
  'world' => 'y',
  'two' => 'b',
);

这可能吗?

我尝试使用 array_splice(),但它需要一个数字键,所以我不能使用:

array_splice( $array1, 'one', 0, $insert_1 );
array_splice( $array1, 'one', 0, $insert_2 );
array_splice( $array2, 'one', 0, $insert_1 );
array_splice( $array2, 'one', 0, $insert_2 );

【问题讨论】:

    标签: php arrays array-splice


    【解决方案1】:

    没有直接的方法可以做到这一点。 您可以尝试的一件事是,首先将主数组划分到要插入另一个数组的位置,将 $insert_1 和 $insert_2 与划分的第一个部分合并,然后将第二个划分的部分合并到修改后的数组。

    逻辑如下:

    $array2 = array(
      'minusone' => 'e',
      'zero' => 'd',
      'one' => 'a',
      'two' => 'b',
    );
    $tempArray1 = array(
          'minusone' => 'e',
          'zero' => 'd',
    );
    $tempArray2 = array(
          'one' => 'a',
          'two' => 'b',
    );
    $tempArray3 = array_merge($tempArray1, $insert_1);
    $changedArray = array_merge($tempArray3, $tempArray2);
    

    这里是这个函数的一个例子,直接使用它或者做相应的改变:

    <?php 
    $arr = array(
      'one' => 'a',
      'two' => 'b',
      'four' => 'd',
    );
    
    function addArrayAfter($mainArray, $key, $arrayToAdd){
        $tempArray = array();
        $tempArray2 = array();
        $splitHere = false;
        foreach($mainArray as $k => $v) {
            if($splitHere){
                $tempArray2[$k] = $v;
            } else {
                $tempArray[$k] = $v;
            }
    
            if($k == $key){
                $splitHere = true;
                $tempArray[$k] = $v;
            }
        }
    
        $tempArray3 = array_merge($tempArray, $arrayToAdd);
        return array_merge($tempArray3, $tempArray2);
    }
    
    $insert_1 = array( 'hello' => 'x' );
    $insert_2 = array( 'world' => 'y' );
    $arr = addArrayAfter($arr, 'two', $insert_1);
    $arr = addArrayAfter($arr, 'two', $insert_2);
    
    
    print_r($arr);
    ?>
    

    【讨论】:

    • 如果这个答案对你有帮助,请分享我的博客:vny.xyz 我开始写博客是为了在那里写这些类型的信息,与 javascript、nodeJS、PHP、android 相关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2013-01-25
    • 2019-12-03
    • 2020-03-05
    • 2017-01-10
    相关资源
    最近更新 更多