PHP在不同的密钥上推送相同的数据

时间:2018-05-05 06:00:24

标签: php cakephp cakephp-2.0

我的数据如下

<?php
    $cart = array(
        'c' => array(
            array(
                'Cart' => array('course_type_quantity' => 3),
                'c' => array(
                    'id' => 2152,
                    'name' => 'Product1',
                    'duration' => 5,
                    'image' => 'IMG-2152.png',
                    'exams' => '606,652',
                    'exam' => 0
                )
            ),
            array(
                'Cart' => array('course_type_quantity' => 3),
                'c' => array(
                    'id' => 2152,
                    'name' => 'Product2',
                    'duration' => 5,
                    'image' => 'IMG-2153.png',
                    'exams' => '607,653',
                    'exam' => 0
                )
            )
        )
    );
?>

现在我想要来自上面数组的数据:

<?php
    $exams => array(
        606 => 'Product1',
        652 => 'Product1',
        607 => 'Product2',
        653 => 'Product2',
    );
?>

我的代码

foreach($data['c'] as $r){
    if($r['c']['exam']==0){
        $id = explode(',',$r['c']['exams']);
        for($i=0;$i<(count($id));$i++){
            $data['exams'][$id[$i]] = $r['c']['name'];
            $ids[] = $id[$i];
        }
    }
}

哪个没有任何错误......

但我不想要嵌套循环。因为这只是这个功能的一段代码,所以我在之前和之后都写过。

请为此建议任何简短代码......

由于

1 个答案:

答案 0 :(得分:0)

您可以使用array_reduce汇总数组。您可以使用array_combinearray_fill

$cart = array(...); //Your array

$exams = array_reduce($cart['c'], function($c, $v){
    $e = explode(',',$v['c']['exams']);
    return $c + array_combine($e,array_fill(0,count($e), $v['c']['name']));
}, array());

这将导致:

Array
(
    [606] => Product1
    [652] => Product1
    [607] => Product2
    [653] => Product2
)