将具有指定值的数组合并为一个键

时间:2015-04-16 05:43:49

标签: php arrays multidimensional-array

现在,我有这样的数组:

[9] => Array
    (
        [sl] => 10
        [upload_dt] => 2015-04-15 14:39:58
        [total_files] => 3
        [file_name] => logo01.png
        [remarks] => qqq
        [status] => pending
        [download_file] => http://localhost/web/download_file21
    )

[10] => Array
    (
        [sl] => 10
        [upload_dt] => 2015-04-15 14:39:58
        [total_files] => 3
        [file_name] => face.jpg
        [remarks] => 5645645
        [status] => pending
        [download_file] => http://localhost/web/download_file22
    )

[11] => Array
    (
        [sl] => 10
        [upload_dt] => 2015-04-15 14:39:58
        [total_files] => 3
        [file_name] => ID_11401871809904(15).pdf
        [remarks] => 567567
        [status] => pending
        [download_file] => http://localhost/web/download_file23
    )

现在,我需要将一些索引中的相同值合并为一个数组。

合并后的数组值最终应该如下所示。

[9] => Array
    (
        [sl] => 10
        [upload_dt] => 2015-04-15 14:39:58
        [total_files] => 3
        [file_name] => logo01.png , face.jpg, ID_11401871809904(15).pdf
        [remarks] => qqq, 5645645 , 567567
        [status] => pending, pending ,pending
        [download_file] => http://localhost/web/download_file21,
                           http://localhost/web/download_file22,
                       http://localhost/web/download_file23
    )

现在,我尝试使用array_merge,但在这种情况下实际上并不起作用。

3 个答案:

答案 0 :(得分:2)

解决方案将是这样的:

<?php
    $result = array();
    $ar1[9] = Array
                (
                    'sl' => 10,
                    'upload_dt' => '2015-04-15 14:39:58',
                    'total_files' => 3,
                    'file_name' => 'logo01.png',
                    'remarks' => 'qqq',
                    'status' => 'pending',
                    'download_file' => 'http://localhost/web/download_file21'
                );
    $ar1[10] = Array
                (
                    'sl' => 10,
                    'upload_dt' => '2015-04-15 14:39:58',
                    'total_files' => 3,
                    'file_name' => 'face.jpg',
                    'remarks' => '5645645',
                    'status' => 'pending',
                    'download_file' => 'http://localhost/web/download_file22'
                );

    $ar1[11] =  Array
                (
                    'sl' => 10,
                    'upload_dt' => '2015-04-15 14:39:58',
                    'total_files' => 3,
                    'file_name' => 'ID_11401871809904(15).pdf',
                    'remarks' => 567567,
                    'status' => 'pending',
                    'download_file' => 'http://localhost/web/download_file23'
                );

    foreach($ar1 as $record){
        $keys = array_keys($record); 
        foreach($keys as $key) { 
            if(array_key_exists($key,$result)){
                $valeInKey = explode(',', $result[$key]);
                if (!in_array($record[$key], $valeInKey)){
                    $result[$key]= $result[$key] .",".$record[$key];
                }
            } else{
                $result[$key]= $record[$key];
            } 
        }

    }
    echo"<pre>";print_r($result);exit;

    ?>

答案 1 :(得分:1)

你实际上是在合并这些数组中的字符串,所以只是放弃array_merge的想法,只需使用一个简单的循环,然后使用该键作为连接字符串的基础。粗略的例子:

$result = array();
foreach($array as $values) {
    if(!isset($result[$values['sl']])) {
        $result[$values['sl']] = $values; // initial
    } else {
        foreach(array('file_name', 'remarks', 'status', 'download_file') as $field) {
            $result[$values['sl']][$field] .= ", {$values[$field]}";
        }

    }
}

Sample Output

答案 2 :(得分:0)

array_merge无法正常工作,因为密钥会相互覆盖 一个解决方案是在foreach的帮助下合并它们。像这样:

$new = array();
foreach($arr as $key => $value) {
    $new[$key] .= ", ".$value;
}

但是对于要合并的每个阵列,您会有多个条目。如果您只想让它们为少数,您必须检查密钥并做相应的事情。