根据相同的键值连接值

时间:2019-12-06 13:22:47

标签: php arrays implode php-7.2

我是PHP的新手,我想根据void read(QString fName) { QFile file(fName); if (!file.open(QFile::ReadOnly | QFile::Text)) { std::cout << "Could not open the file for reading" << std::endl; return; } QTextStream in(&file); QString text = in.readAll(); std::cout << text << std::endl; file.close(); } 键将值与相同的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
        )

3 个答案:

答案 0 :(得分:2)


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

答案 1 :(得分:0)

您可以使用此功能来检索期望的输出:

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

答案 2 :(得分:0)

$drugs = [
    [
        'id' => 17,
        'drug' => 'Clobazam',
    ],
    [
        'id' => 23,
        'drug' => 'Dexametasona',
    ],
    [
        'id' => 23,
        'drug' => 'Diiodohidroxiquinoleína',
    ],
    [
        'id' => 25,
        'drug' => 'Diclofenac,dietilamina',
    ],
];
$combinedDurgs = [];
foreach ($drugs as &$drug) {
    $combinedDurgs['drugs'][$drug['id']][] = $drug['drug'];

}

$expectedOutput = [];

foreach ($combinedDurgs['drugs'] as $drugId => $drug) {
    $expectedOutput[$drugId] = implode(',', $drug);
}

输出将

Array
(
    [17] => Clobazam
    [23] => Dexametasona,Diiodohidroxiquinoleína
    [25] => Diclofenac,dietilamina
)