PHP数组,如果重复id,则返回值并删除重复的

PHP数组,如果重复id,则返回值并删除重复的,php,arrays,Php,Arrays,我有一个这样的数组 array(2) { ["sys_ID"]=> string(32) "ab0ce921dba8a810f6db3892399619d9" ["sites"]=> array(5) { [0]=> array(2) { ["sys_ID"]=> string(32) "448ce5a1dba8a810f6db3892399619ba&quo

我有一个这样的数组

array(2) {
["sys_ID"]=> string(32) "ab0ce921dba8a810f6db3892399619d9" ["sites"]=> array(5) {
    [0]=> array(2) {
        ["sys_ID"]=> string(32) "448ce5a1dba8a810f6db3892399619ba" ["service"]=> string(4) "IDMB" } [1]=> array(2) {
        ["sys_ID"]=> string(32) "448ce5a1dba8a810f6db3892399619ba" ["service"]=> string(4) "ODMB" } [2]=> array(2) {
        ["sys_ID"]=> string(32) "598ce5a1dba8a810f6db3892399619bc" ["service"]=> string(4) "IDMB" } [3]=> array(2) {
        ["sys_ID"]=> string(32) "876ce5a1dba8a810f6db38923996199f" ["service"]=> string(4) "IDMB" } [4]=> array(2) {
        ["sys_ID"]=> string(32) "876ce5a1dba8a810f6db38923996199f" ["service"]=> string(4) "ODMB" } } } 
如果存在重复的
['sys_ID']
我想更改第一个
['service']=>“IDMB,ODMB”
,然后删除重复的值,这样只有1个。因此,上述情况将变得更加严重

    array(2) {
["sys_ID"]=> string(32) "ab0ce921dba8a810f6db3892399619d9" ["sites"]=> array(5) {
    [0]=> array(2) {
        ["sys_ID"]=> string(32) "448ce5a1dba8a810f6db3892399619ba" ["service"]=> string(4) "IDMB,ODMB" } [1]=> array(2) {
        ["sys_ID"]=> string(32) "598ce5a1dba8a810f6db3892399619bc" ["service"]=> string(4) "IDMB" } [2]=> array(2) {
        ["sys_ID"]=> string(32) "876ce5a1dba8a810f6db38923996199f" ["service"]=> string(4) "IDMB,ODMB" } ]} } 
第一个数组用于获取POST值

<?php    
foreach ($_POST['services'] as $item) {
            $parts = explode(',', $item);
            $siteID = $parts[1];
            $services = $parts[0];
            $data['sites'][] = [
                    'sys_ID'  => $siteID,
                    'service' => $services
            ];
        }
?>

将生成数组的方式更改为以下方式:

<?php
$data = [
    'sites' => [],
];
foreach ($_POST['services'] as $item) {
    // Gather your data
    $parts = explode(',', $item);
    $siteID = $parts[1];
    $services = $parts[0];
    
    // Set flag to remember whether you need to add it
    $add = true;
    
    // Loop through existing data and check if the sys_ID already exists
    foreach ($data['sites'] as &$dataDetails) {
        
        // It does ... so just append your service
        if ($dataDetails['sys_ID'] === $siteID) {
            $add = false;
            $dataDetails['service'] .= ',' . $services;
            break;
        }
        
    }
    
    // Couldn't find the sys_ID => Add new entry
    if ($add) {
        $data['sites'][] = [
            'sys_ID'  => $siteID,
            'service' => $services
        ];
    }
}
?>
$arr = array(
    'sys_ID' => 'ab0ce921dba8a810f6db3892399619d9',
    'sites' => array(
        0 => array(
            'sys_ID' => "448ce5a1dba8a810f6db3892399619ba",
            'service'=> "IDMB" 
        ),
        1 => array(
            'sys_ID' => "448ce5a1dba8a810f6db3892399619ba",
            'service'=> "ODMB" 
        ),
        2 => array(
            'sys_ID'=> "598ce5a1dba8a810f6db3892399619bc", 
            'service'=> "IDMB" 
        ),
        3 => array(
            'sys_ID'=> "876ce5a1dba8a810f6db38923996199f", 
            'service'=> "IDMB" 
        ),
        4 => array(
            'sys_ID'=> "876ce5a1dba8a810f6db38923996199f", 
            'service'=> "ODMB" 
        )
    )           
);

最好从一开始就正确填充数组;然而,我仍然会发布一个解决方案。我们对数组的定义如下:

<?php
$data = [
    'sites' => [],
];
foreach ($_POST['services'] as $item) {
    // Gather your data
    $parts = explode(',', $item);
    $siteID = $parts[1];
    $services = $parts[0];
    
    // Set flag to remember whether you need to add it
    $add = true;
    
    // Loop through existing data and check if the sys_ID already exists
    foreach ($data['sites'] as &$dataDetails) {
        
        // It does ... so just append your service
        if ($dataDetails['sys_ID'] === $siteID) {
            $add = false;
            $dataDetails['service'] .= ',' . $services;
            break;
        }
        
    }
    
    // Couldn't find the sys_ID => Add new entry
    if ($add) {
        $data['sites'][] = [
            'sys_ID'  => $siteID,
            'service' => $services
        ];
    }
}
?>
$arr = array(
    'sys_ID' => 'ab0ce921dba8a810f6db3892399619d9',
    'sites' => array(
        0 => array(
            'sys_ID' => "448ce5a1dba8a810f6db3892399619ba",
            'service'=> "IDMB" 
        ),
        1 => array(
            'sys_ID' => "448ce5a1dba8a810f6db3892399619ba",
            'service'=> "ODMB" 
        ),
        2 => array(
            'sys_ID'=> "598ce5a1dba8a810f6db3892399619bc", 
            'service'=> "IDMB" 
        ),
        3 => array(
            'sys_ID'=> "876ce5a1dba8a810f6db38923996199f", 
            'service'=> "IDMB" 
        ),
        4 => array(
            'sys_ID'=> "876ce5a1dba8a810f6db38923996199f", 
            'service'=> "ODMB" 
        )
    )           
);
要按所述方式合并元素,可以执行以下循环:

// For each site (1)...
for($i=0; $i<count($arr["sites"])-1; $i++){
    // Take each of sites starting from the next one to the end (2)
    for($j=$i+1; $j<count($arr["sites"]); $j++){
        // If there is a match in sys_ID beteen (1) and (2)
        if($arr["sites"][$i]['sys_ID'] == $arr["sites"][$j]['sys_ID']){
            // Merge the service into (1) with comma separation
            $arr["sites"][$i]['service'] = $arr["sites"][$i]['service'].",".$arr["sites"][$j]['service'];
            // then delete (2)
            array_splice($arr["sites"],$j,1);
            $j--;
        }
    }
}
//对于每个站点(1)。。。

对于($i=0;$iSide注意:这不是很有效。但是如果您的post数据很小,那么这应该不会是一个问题。