对于 PHP 中不同数据类型数组的合并,有三种常用方法:1)array_merge_recursive,递归合并,保留子数组;2)php 7.4+ 的 spread operator,展
对于 PHP 中不同数据类型数组的合并,有三种常用方法:1)array_merge_recursive,递归合并,保留子数组;2)php 7.4+ 的 spread operator,展开数组;3)自定义合并函数,提供精细控制。
不同数据类型间的 PHP 数组合并
在 PHP 中,合并数组时经常会遇到不同数据类型的数据,为了实现这些数据类型的完美合并,这里介绍三种常见的方法,并提供实战案例进行演示。
1. array_merge_recursive
此函数可递归合并数组,将子数组以数组的形式合并,而不会丢失子数组的数据。
<?php
$array1 = ['a' => 1, 'b' => [3, 4], 'c' => ['d' => 6]];
$array2 = ['b' => [1, 2], 'e' => 5];
$mergedArray = array_merge_recursive($array1, $array2);
print_r($mergedArray); // 输出:
// Array
// (
// [a] => 1
// [b] => Array
// (
// [0] => 3
// [1] => 4
// [2] => 1
// [3] => 2
// )
// [c] => Array
// (
// [d] => 6
// )
// [e] => 5
// )
?>
2. spread operator(PHP 7.4+)
PHP 7.4 引入了 spread operator,它允许在数组中展开另一个数组。
<?php
$array1 = ['a' => 1, 'b' => [3, 4]];
$array2 = ['b' => [1, 2], 'e' => 5];
$mergedArray = [...$array1, ...$array2];
print_r($mergedArray); // 输出:
// Array
// (
// [0] => 1
// [1] => 3
// [2] => 4
// [3] => 1
// [4] => 2
// [5] => 5
// )
?>
3. 自定义合并函数
如果你需要对合并过程进行更精细的控制,可以编写一个自定义的合并函数。
<?php
function custom_array_merge(array $array1, array $array2): array
{
foreach ($array2 as $key => $value) {
if (isset($array1[$key]) && is_array($array1[$key]) && is_array($value)) {
$array1[$key] = custom_array_merge($array1[$key], $value);
} else {
$array1[$key] = $value;
}
}
return $array1;
}
$array1 = ['a' => 1, 'b' => [3, 4], 'c' => ['d' => 6]];
$array2 = ['b' => [1, 2], 'e' => 5];
$mergedArray = custom_array_merge($array1, $array2);
print_r($mergedArray); // 输出:
// Array
// (
// [a] => 1
// [b] => Array
// (
// [0] => 3
// [1] => 4
// [2] => 1
// [3] => 2
// )
// [c] => Array
// (
// [d] => 6
// )
// [e] => 5
// )
?>
以上就是PHP数组合并时,如何实现不同数据类型之间的合并?的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: PHP数组合并时,如何实现不同数据类型之间的合并?
本文链接: https://www.lsjlt.com/news/610200.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-11
2024-05-11
2024-05-11
2024-05-11
2024-05-11
2024-05-11
2024-05-11
2024-05-11
2024-05-11
2024-05-11
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0