PHP数组组合右键的值
我对PHP中的数组有一个问题: 我有很多zip文件,里面有很多数据,使用preg_grep我可以得到以下结果: (这些数据从zip文件中的多个文本文件返回) 因此,我如何使用ZipName值组合/合并所有这些数组 就像在SQL中一样,它很容易: 选择*FROM*,其中ZipName='x'PHP数组组合右键的值,php,arrays,Php,Arrays,我对PHP中的数组有一个问题: 我有很多zip文件,里面有很多数据,使用preg_grep我可以得到以下结果: (这些数据从zip文件中的多个文本文件返回) 因此,我如何使用ZipName值组合/合并所有这些数组 就像在SQL中一样,它很容易: 选择*FROM*,其中ZipName='x' 我认为您将合并不同的数组,因此请使用数组合并 $array0 = Array ( "ZipName" => data.zip,
我认为您将合并不同的数组,因此请使用数组合并
$array0 = Array
(
"ZipName" => data.zip,
"Age" => 45
);
$array1 = Array
(
"ZipName" => data.zip,
"Name" => John
);
$array2 = Array
(
"ZipName" => data.zip
);
$array3 = Array
(
"ZipName" => data.zip,
"City" => Leicester
);
print_r(array_merge($array0, $array1, $array2, $array3));
输出:
Array ( [ZipName] => datazip
[Age] => 45
[Name] => John
[City] => Leicester )
使用
array\u merge
,array\u combine
等的替代方法。。。只需两个简单的foreach循环并将值设置到新数组中($new\u arr
)
更新
我不清楚OP想要什么,但我希望现在能更清楚:
试试这个:
(基本上是将值添加到array[ZipName的名称][{内部数组的当前键}]
$arr = [
[
'ZipName' => 'data.zip',
'Age' => '45'
],
[
'ZipName' => 'data.zip',
'Name' => 'John'
],
[
'ZipName' => 'data2.zip',
'Age' => '27'
],
[
'ZipName' => 'data1.zip',
'Name' => 'Abram'
],
[
'ZipName' => 'data1.zip'
],
[
'ZipName' => 'data2.zip',
'City' => 'London'
],
[
'ZipName' => 'data2.zip',
'Name' => 'Inna'
],
[
'ZipName' => 'data1.zip',
'City' => 'London'
]
];
$new_arr = [];
foreach($arr as $key => $inner_arr) {
foreach($inner_arr as $ik => $item) {
$new_arr[$inner_arr['ZipName']][$ik] = $item;
}
}
输出:
Array
(
[data.zip] => Array
(
[ZipName] => data.zip
[Age] => 45
[Name] => John
)
[data2.zip] => Array
(
[ZipName] => data2.zip
[Age] => 27
[City] => London
[Name] => Inna
)
[data1.zip] => Array
(
[ZipName] => data1.zip
[Name] => Abram
[City] => London
)
)
$new_arr = array_values($new_arr);
执行时:
Array
(
[data.zip] => Array
(
[ZipName] => data.zip
[Age] => 45
[Name] => John
)
[data2.zip] => Array
(
[ZipName] => data2.zip
[Age] => 27
[City] => London
[Name] => Inna
)
[data1.zip] => Array
(
[ZipName] => data1.zip
[Name] => Abram
[City] => London
)
)
$new_arr = array_values($new_arr);
该键只是一个数字索引(如果有关系的话)
您需要的是按索引['ZipName']
处的唯一值分组,然后分别合并这些组。这可以通过以下方法完成
例如:
<?php
declare(strict_types=1);
$input = [
[
'ZipName' => 'data_1.zip',
'Age' => 45,
], [
'ZipName' => 'data_1.zip',
'Name' => 'John',
], [
'ZipName' => 'data_1.zip',
], [
'ZipName' => 'data_1.zip',
'City' => 'Leicester',
],
[
'ZipName' => 'data_2.zip',
'Age' => 45,
], [
'ZipName' => 'data_2.zip',
'Name' => 'John',
], [
'ZipName' => 'data_2.zip',
], [
'ZipName' => 'data_2.zip',
'City' => 'Leicester',
],
];
$output = array_values(array_reduce($input, static function (array $acc, array $item): array {
$acc[$item['ZipName']] = array_merge($acc[$item['ZipName']] ?? [], $item);
return $acc;
}, []));
print_r($output);
是输入数组多维数组还是不同的-2数组???@ForgeWebDesign无差异0 1 2 3等。数组遵循文本文件的总计数,这意味着每个新文本文件都是一个新数组。然后可以使用数组_merge()函数您的实际数据在ZipName
中是否有不同的值?在您的问题中包含该值可能会有所帮助。实际上,您希望这样做:但只需删除unset()
调用,因为您希望将zipname保留在子数组中。例如:我需要使用zipname值组合它!我现在修改了答案。是的,我得到了类似的结果,但我想要的是使用zipname值组合它!
Array
(
[0] => Array
(
[ZipName] => data.zip
[Age] => 45
[Name] => John
)
[1] => Array
(
[ZipName] => data2.zip
[Age] => 27
[City] => London
[Name] => Inna
)
[2] => Array
(
[ZipName] => data1.zip
[Name] => Abram
[City] => London
)
)
<?php
declare(strict_types=1);
$input = [
[
'ZipName' => 'data_1.zip',
'Age' => 45,
], [
'ZipName' => 'data_1.zip',
'Name' => 'John',
], [
'ZipName' => 'data_1.zip',
], [
'ZipName' => 'data_1.zip',
'City' => 'Leicester',
],
[
'ZipName' => 'data_2.zip',
'Age' => 45,
], [
'ZipName' => 'data_2.zip',
'Name' => 'John',
], [
'ZipName' => 'data_2.zip',
], [
'ZipName' => 'data_2.zip',
'City' => 'Leicester',
],
];
$output = array_values(array_reduce($input, static function (array $acc, array $item): array {
$acc[$item['ZipName']] = array_merge($acc[$item['ZipName']] ?? [], $item);
return $acc;
}, []));
print_r($output);