【问题标题】:Concatenate values according to the same key value根据相同的键值连接值
【发布时间】:2019-12-06 13:22:47
【问题描述】:

我是 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
        )

【问题讨论】:

  • 您是否从数据库中获取此数据?
  • 不,来自不同的 xml 文件。这个数组是几个文件的融合。
  • 遍历你的数据,将项目放入一个新数组中。执行此操作时,检查新数组中是否已存在具有相同 id 值的项目 - 如果是,您需要获取该项目的当前 drug 值,将其与来自的 drug 组合成一个数组当前记录,并再次将整个内容分配给已存在项的drug键。
  • 这应该会给你一个很好的提示。 stackoverflow.com/questions/12706359/php-array-group

标签: php arrays implode php-7.2


【解决方案1】:

$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);

【讨论】:

    【解决方案2】:

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

    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。通过连接完成附加值。有关array_key_exists 工作原理的信息,您可以阅读here

    【讨论】:

    • 我不建议这样做,因为它效率不高。此外,应该完全避免在$data 本身的循环内对数据集$data 进行排序。
    • @vivek_23,没必要,我知道。只想着其他的东西
    猜你喜欢
    • 2014-11-21
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2013-01-04
    • 2020-11-09
    相关资源
    最近更新 更多