【问题标题】:I am working with PHP and have an Array of Arrays that looks something like this:我正在使用 PHP,并且有一个看起来像这样的数组数组:
【发布时间】:2014-05-11 18:05:35
【问题描述】:
Array
(
    [0] => Array
        (
            [gr_number] => 1
            [batch] => A
            [maths] => 80/100
            [english] => 80/100
            [science] => 80/100
            [hindi] => 80/100
            [computer] => 80/100
            [socialscience] => 85/100
        )

    [1] => Array
        (
            [gr_number] => 2
            [batch] => A
            [maths] => 80/100
            [english] => 80/100
            [science] => 80/100
            [hindi] => 80/100
            [computer] => 80/100
            [socialscience] => 86/100
        )

    [2] => Array
        (
            [gr_number] => 3
            [batch] => A
            [maths] => 80/100
            [english] => 80/100
            [science] => 80/100
            [hindi] => 80/100
            [computer] => 80/100
            [socialscience] => 87/100
        )

)

如您所见,它们是主数组中的一些主题元素,o 我想将所有主题元素合并到同一个数组中,像这样

Array
(
    [0] => Array
        (
            [gr_number] => 1
            [batch] => A
            [result_details] => maths : 80/100,english:80/100,science:80/100,hindi:80/100,computer:80/100,socialscience:85/100;
        )

    [1] => Array
        (
            [gr_number] => 2
            [batch] => A
            [result_details] => maths : 80/100,english:80/100,science:80/100,hindi:80/100,computer:80/100,socialscience:85/100;  
      )

    [2] => Array
        (
            [gr_number] => 3
            [batch] => A
            [result_details] => maths : 80/100,english:80/100,science:80/100,hindi:80/100,computer:80/100,socialscience:85/100;  
        )

)

【问题讨论】:

标签: php arrays multidimensional-array foreach merge


【解决方案1】:

您可以将array_maparray_diff_keyarray_intersect_key 结合使用。 有点像这样:

$keys = array('gr_number', 'batch');
$excludes = array_combine($keys, array_fill(0, count($keys), 0));
$result = array_map(
    function ($arr) use($excludes) {
        $ret = array_intersect_key($arr, $excludes);
        $arr = array_diff_key($arr, $excludes);
        $ret['result_details'] = implode(', ', array_map(
            function ($v1, $v2) { return "$v1:$v2"; },
            array_keys($arr), array_values($arr)
        ));
        return $ret;
    },
    $array
);

Demo

【讨论】:

    【解决方案2】:

    您可以简单地在 foreach 循环中添加一个新元素 result_details 与其他元素的组合值,然后取消设置您以后不需要的那些:

    foreach($arr as &$val){
        $val['result_details']='maths:'.$val['maths'].',english:'.$val['english'].',science:'.$val['science'].',hindi:'.$val['hindi'].',computer:'.$val['computer'].',socialscience:'.$val['socialscience'];
        unset($val['maths'],$val['english'],$val['science'],$val['science'],$val['hindi'],$val['computer'],$val['socialscience']);
    }
    

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多