PHP数组组合右键的值

PHP数组组合右键的值,php,arrays,Php,Arrays,我对PHP中的数组有一个问题: 我有很多zip文件,里面有很多数据,使用preg_grep我可以得到以下结果: (这些数据从zip文件中的多个文本文件返回) 因此,我如何使用ZipName值组合/合并所有这些数组 就像在SQL中一样,它很容易: 选择*FROM*,其中ZipName='x' 我认为您将合并不同的数组,因此请使用数组合并 $array0 = Array ( "ZipName" => data.zip,

我对PHP中的数组有一个问题:

我有很多zip文件,里面有很多数据,使用preg_grep我可以得到以下结果:

(这些数据从zip文件中的多个文本文件返回)

因此,我如何使用ZipName值组合/合并所有这些数组

就像在SQL中一样,它很容易:

选择*FROM*,其中ZipName='x'


我认为您将合并不同的数组,因此请使用数组合并

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