PHP Нажмите те же данные на другой ключ - PullRequest
0 голосов
/ 05 мая 2018

У меня есть следующие данные

<?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 голосов
/ 05 мая 2018

Вы можете использовать array_reduce для суммирования вашего массива. Вы можете использовать array_combine и array_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
)
...