Php 如果找到重复的其他值键,则对值进行分组

Php grouping values if find duplicate other value key

我在查询提取的 while 循环中有这个 如果在前缀键

中找到出现,我想重新组合值
while(($arr = $_opDB->fetch_assoc($result)) != FALSE){
        if(!array_search($arr['base_name'], array_column($translate_array, 'connector_prefix'))){
            $translate_array[] = array(
                'prefix' => $arr['base_name'],
                'translate_hostname' => $arr['translate_hostname']
            );
        } else {
            $translate_array[$i-1]['translate_hostname'][] = $arr['translate_hostname'];
        }

        $i++;
}
...

Array
(
    ...

    [3] => Array
        (
            [prefix] => DD
            [translate_hostname] => dd
        )

    [4] => Array
        (
            [prefix] => DD
            [translate_hostname] => de
        )

)

如果前缀与前一个循环相同,那么将数组添加到前一个 'translate_hostname' 中,这样

[3] => Array
        (
            [prefix] => DD
            [translate_hostname] => 
              [0] => Array
                      (
                          [translate] => dd
                      )

              [1] => Array
                      (
                          [translate] => de
                      )

        )

但是不行,谢谢帮助

如果我理解正确,您需要在同一行中保留具有相同 base_name 的相同记录,并转换 translate_hostname 的键 到具有两个值的数组

我们可以做到

对所有记录进行 1 次循环

2 组记录 base_name 通过使用 isset() 检查第一个有此 basename 的记录或将此记录添加到组

3-如果不是第一条记录检查是否 存在的 translate_hostname 是否为数组 if not convert 它到一个数组并将第一个值和当前循环添加到它 行值

代码:-

while(($arr = $_opDB->fetch_assoc($result)) != FALSE){
    
    if(!isset($translate_array[$arr['base_name']]))
    {
        $translate_array[$arr['base_name']] = array(
                'prefix' => $arr['base_name'],
                'translate_hostname' => $arr['translate_hostname']
            );
            
    }else {
        
        $translate_hotnames = $translate_array[$arr['base_name']]["translate_hostname"];
                
        if(!is_array($translate_hotnames)){
            
            $translate_hotnames = [$translate_hotnames];
            $translate_hotnames[] = $arr['translate_hostname'];
        }
        else {
            $translate_hotnames[] = $arr['translate_hostname'];
        }
        
        $translate_array[$arr['base_name']]["translate_hostname"] = $translate_hotnames;
    }

}

这将导致以下结果“关联”数组分组:

array(1) {
  ["DD"]=>
  array(2) {
    ["prefix"]=>
    string(2) "DD"
    ["translate_hostname"]=>
    array(2) {
      [0]=>
      string(2) "dd"
      [1]=>
      string(2) "de"
    }
  }
}

要将其检索为提到的结果“索引”数组,您可以使用 array_values()

通过在循环后添加以下行

$translate_array = array_values($translate_array)

结果将是:-

array(1) {
  [0]=>
  array(2) {
    ["prefix"]=>
    string(2) "DD"
    ["translate_hostname"]=>
    array(2) {
      [0]=>
      string(2) "dd"
      [1]=>
      string(2) "de"
    }
 

} }