假设我们有两个数组:
$array_1 = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
);
$array_2 = array(
'zero' => '0',
'one' => '1',
'two' => '2',
'three' => '3',
);
现在,我想在每个数组的第三个元素后插入数组('sample_key' => 'sample_value')。我该怎么做呢?
最简单的解决方案,如果你想在某个键后插入(一个元素或数组):
function array_splice_after_key($array, $key, $array_to_insert)
{
$key_pos = array_search($key, array_keys($array));
if($key_pos !== false){
$key_pos++;
$second_array = array_splice($array, $key_pos);
$array = array_merge($array, $array_to_insert, $second_array);
}
return $array;
}
如果你有:
$array = [
'one' => 1,
'three' => 3
];
$array_to_insert = ['two' => 2];
和执行:
$result_array = array_splice_after_key($array, 'one', $array_to_insert);
你会有:
Array (
['one'] => 1
['two'] => 2
['three'] => 3
)
对于第一个数组,使用array_splice():
$array_1 = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
);
array_splice($array_1, 3, 0, 'more');
print_r($array_1);
输出:
Array(
[0] => zero
[1] => one
[2] => two
[3] => more
[4] => three
)
对于第二个,没有顺序,所以你只需要做:
$array_2['more'] = '2.5';
print_r($array_2);
把钥匙按你想要的排序。
这可以通过array.splice()来实现。请注意,array_splice或array_merge不会为关联数组保留键。因此使用array_slice和'+'操作符来连接两个数组。
详情请点击这里
$array_1 = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
);
$array_2 = array(
'zero' => '0',
'one' => '1',
'two' => '2',
'three' => '3',
);
$index = 2;
$finalArray = array_slice($array_1, 0, $index, true) +
$array2 +
array_slice($array_2, $index, NULL, true);
print_r($finalArray);
/*
Array
(
[0] => zero
[1] => one
[10] => grapes
[z] => mangoes
[two] => 2
[three] => 3
)
*/
更简洁的方法(基于使用的流动性和更少的代码)。
/**
* Insert data at position given the target key.
*
* @param array $array
* @param mixed $target_key
* @param mixed $insert_key
* @param mixed $insert_val
* @param bool $insert_after
* @param bool $append_on_fail
* @param array $out
* @return array
*/
function array_insert(
array $array,
$target_key,
$insert_key,
$insert_val = null,
$insert_after = true,
$append_on_fail = false,
$out = [])
{
foreach ($array as $key => $value) {
if ($insert_after) $out[$key] = $value;
if ($key == $target_key) $out[$insert_key] = $insert_val;
if (!$insert_after) $out[$key] = $value;
}
if (!isset($array[$target_key]) && $append_on_fail) {
$out[$insert_key] = $insert_val;
}
return $out;
}
用法:
$colors = [
'blue' => 'Blue',
'green' => 'Green',
'orange' => 'Orange',
];
$colors = array_insert($colors, 'blue', 'pink', 'Pink');
die(var_dump($colors));
这是PHP 7.1中的另一个解决方案
/**
* @param array $input Input array to add items to
* @param array $items Items to insert (as an array)
* @param int $position Position to inject items from (starts from 0)
*
* @return array
*/
function arrayInject( array $input, array $items, int $position ): array
{
if (0 >= $position) {
return array_merge($items, $input);
}
if ($position >= count($input)) {
return array_merge($input, $items);
}
return array_merge(
array_slice($input, 0, $position, true),
$items,
array_slice($input, $position, null, true)
);
}
这是一种更好的方法,如何在数组的某个位置插入项目。
function arrayInsert($array, $item, $position)
{
$begin = array_slice($array, 0, $position);
array_push($begin, $item);
$end = array_slice($array, $position);
$resultArray = array_merge($begin, $end);
return $resultArray;
}