Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 合并数组以输出仅具有唯一值的数组_Php_Arrays_Multidimensional Array_Array Merge_Array Unique - Fatal编程技术网

Php 合并数组以输出仅具有唯一值的数组

Php 合并数组以输出仅具有唯一值的数组,php,arrays,multidimensional-array,array-merge,array-unique,Php,Arrays,Multidimensional Array,Array Merge,Array Unique,我有两个数组需要合并以创建另一个具有唯一值的数组。数组2是可能的文件版本的完整列表,数组1是文件的当前版本。如果数组1和数组2中的项具有相同的id值,则我希望从数组1中获取该项 数组1 $array1 = array( array('id' => '8','file_extension_id' => '8','extension' => '','name' => 'GS','file_version' => '1.0.2'), array('id'

我有两个数组需要合并以创建另一个具有唯一值的数组。数组2是可能的文件版本的完整列表,数组1是文件的当前版本。如果数组1和数组2中的项具有相同的
id
值,则我希望从数组1中获取该项

数组1

$array1 = array(
    array('id' => '8','file_extension_id' => '8','extension' => '','name' => 'GS','file_version' => '1.0.2'),
    array('id' => '2','file_extension_id' => '2','extension' => 'gif', 'name' => 'GIF','file_version' => '1.0.2'),
    array('id' => '1','file_extension_id' => '1','extension' => 'png','name' => 'PNG','file_version' => '1.0.2'),
    array('id' => '19','file_extension_id' => '19','extension' => 'jpg','name' => 'JPG','file_version' => '1.0.2'),
    array('id' => '20','file_extension_id' => '20','extension' => 'pdf','name' => 'PDF','file_version' => '1.0.2'),
);
阵列2

$array2 = array(
    array('id' => '1','file_extension_id' => '','extension' => 'png','name' => 'PNG','file_version' => ''),
    array('id' => '2','file_extension_id' => '','extension' => 'gif','name' => 'GIF','file_version' => ''),
    array('id' => '3','file_extension_id' => '','extension' => 'doc','name' => 'Word 2003','file_version' => ''),
    array('id' => '4','file_extension_id' => '','extension' => 'docx','name' => 'Word 2007+','file_version' => ''),
    array('id' => '5','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel 2010+','file_version' => ''),
    array('id' => '6','file_extension_id' => '','extension' => 'docx','name' => 'Word 2010+','file_version' => ''),
    array('id' => '7','file_extension_id' => '','extension' => 'numbers','name' => 'Mac Numbers','file_version' => ''),
    array('id' => '8','file_extension_id' => '','extension' => '','name' => 'GS','file_version' => ''),
    array('id' => '9','file_extension_id' => '','extension' => '','name' => 'Google Docs','file_version' => ''),
    array('id' => '10','file_extension_id' => '','extension' => 'ots','name' => 'OpenOffice.org Calc','file_version' => ''),
    array('id' => '11','file_extension_id' => '','extension' => 'ott','name' => 'OpenOffice.org Writer','file_version' => ''),
    array('id' => '12','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel for iPad','file_version' => ''),
    array('id' => '13','file_extension_id' => '','extension' => 'xlsm','name' => 'Excel 2007 Macros','file_version' => ''),
    array('id' => '14','file_extension_id' => '','extension' => 'xlsm','name' => 'Excel 2010 Macros','file_version' => ''),
    array('id' => '15','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel 2013+','file_version' => ''),
    array('id' => '16','file_extension_id' => '','extension' => 'xlsm','name' => 'Excel 2013 Macros','file_version' => ''),
    array('id' => '17','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel 2016','file_version' => ''),
    array('id' => '18','file_extension_id' => '','extension' => 'xlsm','name' => 'Excel 2016 Macros','file_version' => ''),
    array('id' => '19','file_extension_id' => '','extension' => 'jpg','name' => 'JPG','file_version' => ''),
    array('id' => '20','file_extension_id' => '','extension' => 'pdf','name' => 'PDF','file_version' => ''),
    array('id' => '21','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel for iPhone','file_version' => ''),
    array('id' => '22','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel for Android','file_version' => ''),
    array('id' => '23','file_extension_id' => '','extension' => 'xls','name' => 'Excel 2003 Macros','file_version' => ''),
    array('id' => '24','file_extension_id' => '','extension' => 'docx','name' => 'Word 2013+','file_version' => ''),
    array('id' => '25','file_extension_id' => '','extension' => 'docx','name' => 'Word 2016','file_version' => '')
);
在尝试使用以下内容时,我不断遇到错误:

$fileInVersion = array_merge($fileExists,$soft);
print_r(array_unique($fileInVersion));
这里有一个错误:

注意:第30行/file.php中的数组到字符串转换

第30行是
print\u r()

如何将这些数组与
id
的唯一值合并在一起?

array\u unique()
默认情况下用于比较二维数组。如果要比较具有多个级别的数组,则需要传入
SORT\u REGULAR
作为
array\u unique()
的第二个参数

默认情况下,
array\u unique()
用于比较二维数组。如果要比较具有多个级别的数组,则需要传入
SORT\u REGULAR
作为
array\u unique()
的第二个参数

数组_unique()不适用于多维数组。 将以下代码用于多维数组

$fileInVersion = array_merge($fileExists,$soft);
$unique_array = array_map("unserialize", array_unique(array_map("serialize", $fileInVersion)));
print_r($unique_array);
数组_unique()不适用于多维数组。 将以下代码用于多维数组

$fileInVersion = array_merge($fileExists,$soft);
$unique_array = array_map("unserialize", array_unique(array_map("serialize", $fileInVersion)));
print_r($unique_array);

首先使用
id
重新索引
$array2
<代码>数组\列可以简化此操作:

$array2 = array_column($array2, null, 'id');
然后为
$array1
中具有匹配
'id'
键的每个值覆盖
$array2
中的键

foreach ($array1 as $key => $value) {
    $array2[$value['id']] = $value;
}

首先使用
id
重新索引
$array2
<代码>数组\列可以简化此操作:

$array2 = array_column($array2, null, 'id');
然后为
$array1
中具有匹配
'id'
键的每个值覆盖
$array2
中的键

foreach ($array1 as $key => $value) {
    $array2[$value['id']] = $value;
}

谢谢,但是我仍然得到29个键而不是25个,所以有4个键仍然是重复值。知道为什么吗?@AlexB你的数组值不相等。您正在比较的第二个数组中的子数组对于
file\u version
都具有
null
,而第一个数组中对应的子数组对于
file\u version
具有
1.0.2
。这些子数组值必须完全相等。因此作为
file\u extension\u id
,但这两个参数都不相关,因为我只需要比较
id
。有什么办法吗?@AlexB你不能用
array\u unique()。它不知道两个重叠的子数组中要保留哪一个,以防像这里这样发生冲突。您必须为
循环运行自定义的
,并插入您自己的逻辑以解决冲突。谢谢,但我仍然得到29个键而不是25个键,因此有4个键仍然是重复值。知道为什么吗?@AlexB你的数组值不相等。您正在比较的第二个数组中的子数组对于
file\u version
都具有
null
,而第一个数组中对应的子数组对于
file\u version
具有
1.0.2
。这些子数组值必须完全相等。因此作为
file\u extension\u id
,但这两个参数都不相关,因为我只需要比较
id
。有什么办法吗?@AlexB你不能用
array\u unique()。它不知道两个重叠的子数组中要保留哪一个,以防像这里这样发生冲突。您必须为
循环运行自定义的
,并插入自己的逻辑来解决冲突。