根据相同的键值连接值

Concatenate values according to the same key value

我是 PHP 中的一些新手,我想根据 drug 键与相同的 id.

连接值

我的阵列:

Array
(
    [0] => Array
        (
            [id] => 17
            [drug] => Clobazam
        )

    [1] => Array
        (
            [id] => 23
            [drug] => Dexametasona
        )

    [2] => Array
        (
            [id] => 23
            [drug] => Diiodohidroxiquinoleína
        )

    [3] => Array
        (
            [id] => 25
            [drug] => Diclofenac,dietilamina
        )

预期输出:

Array
(
    [0] => Array
        (
            [id] => 17
            [drug] => Clobazam
        )

    [1] => Array
        (
            [id] => 23
            [drug] => Dexametasona, Diiodohidroxiquinoleína
        )

    [2] => Array
        (
            [id] => 25
            [drug] => Diclofenac,dietilamina
        )

您可以使用此函数来检索您的预期输出:

function collect_same_id(&$data){

        $tmp = [];
        $i = 0;
        foreach($data as $ind=>$rec){

             if(!array_key_exists($rec['id'],$tmp)){ 
                $tmp[$rec['id']] = $i;
                $i++;
            } else {
                $data[$tmp[$rec['id']]]['drug'] .= ', '.$rec['drug'];
                unset($data[$ind]); 
            } 
        }
        sort($data);
}

collect_same_id($data);

print_r($data);

Demo

输出:

Array
(
    [0] => Array
        (
            [id] => 17
            [drug] => Clobazam
        )

    [1] => Array
        (
            [id] => 23
            [drug] => Dexametasona, Diiodohidroxiquinoleína
        )

    [2] => Array
        (
            [id] => 25
            [drug] => Diclofenac,dietilamina
        )

)

在这里&改变你原来的数组,你可以阅读references here. Appending values done with concatenation. Information about how does array_key_exists works you can read here


$array = [
    [
        'id' => 17,
        'drug' => 'Clobazam'
    ],
    [
        'id' => 23,
        'drug' => 'Dexametasona'
    ],
    [
        'id' => 23,
        'drug' => 'Diiodohidroxiquinoleína'
    ],
    [
        'id' => 25,
        'drug' => 'Clobazam'
    ]
];

$result = [];

foreach ($array as $item) {
    $id = $item['id'];
    $drug = $item['drug'];
    if (isset($result[$id])) {
        $result[$id]['drug'] .= ', ' . $drug;
    } else {
        $result[$id] = $item;
    }
}

$result = array_values($result);

var_dump($result);