Вставить несколько массивов в указанное c расположение многомерного массива со связанным ключом - PullRequest
0 голосов
/ 06 мая 2020

Если у вас есть два массива со случайным количеством ключей:

$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' );

Но вам нужно поместить их в очень Speci c place, и вы не знаете расположение клавиши numeri c, в этом примере, скажем, между ключами 'one' и 'two', чтобы конечный результат для исходных массивов был:

 $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 (), но для этого требуется клавиша numeri c, поэтому я не могу использовать:

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 );

1 Ответ

0 голосов
/ 06 мая 2020

Нет прямого способа сделать это. одна вещь, которую вы можете попробовать, - сначала разделить основной массив до точки, в которую вы хотите вставить другой массив, объединить $ insert_1 и $ insert_2 с разделенной 1-й частью, а затем объединить вторую разделенную часть с измененным массивом.

Вот лог c:

$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);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...