【问题标题】:Array manipulation in php with distinct valuesphp中具有不同值的数组操作
【发布时间】:2016-06-22 09:45:24
【问题描述】:

我正在尝试将多个数组合并为单个数组并使值唯一。

$array = array ( 
        $array1 = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bmi"
    ),
    $array2 = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bp"
    ),
    $array3 = array(
        "id" => 206,
        "firstName" => "KUTAPPA.A.C",
        "gender" => "M",
        "age" => 31,
        "alert" => "bmi"
    )
    );  

这是我的预期输出,

$array = array ( 
        '205' = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bmi,bp"
    ),
    '206' = array(
        "id" => 206,
        "firstName" => "KUTAPPA.A.C",
        "gender" => "M",
        "age" => 31,
        "alert" => "bmi"
    )
);

我正在尝试在 foreach 中合并数组以创建新数组,但它无法获得预期的结果。

【问题讨论】:

  • “它不工作”什么不工作?你还没有发布任何代码。循环遍历原始数组并检查新数组中是否已经存在具有相同 ID 的键,如果存在,则向 alert 添加值,如果不向数组中添加项。
  • 先搜索再询问。 Stackoverflow充满这样的问题和答案
  • ..也许更重要的问题是为什么您拥有包含所有这些重复项的数据?如果您从数据库中获取此数据,为什么不能只使用GROUP_CONCAT
  • 您发布的预期输出不是有效的 PHP 代码。第二行应该是'205' => array('206' = array( 行也是如此。

标签: php


【解决方案1】:

这应该可以解决问题,但正如其中一位 cmets 指出的那样,如果您可以修复数据库以便为您分组,那将是理想的。

<?php
$arrays = array ( 
$array1 = array(
  "id" => 205,
    "firstName" => "NANCY GEORGE",
  "gender" => "F",
  "age" => 21,
  "alert" => "bmi"
),
$array2 = array(
  "id" => 205,
  "firstName" => "NANCY GEORGE",
  "gender" => "F",
  "age" => 21,
  "alert" => "bp"
),
$array3 = array(
  "id" => 206,
  "firstName" => "KUTAPPA.A.C",
  "gender" => "M",
  "age" => 31,
  "alert" => "bmi"
)
);

$cleanArray; //???
foreach($arrays as $array){
if(!empty($cleanArray)){
    foreach($cleanArray as $cleanKey => $clean){
        if($array['id'] == $cleanKey){
            //Just did alerts because I hope nothing else needs this...
            if(!($array['alert'] == $clean['alert'])){
                $cleanArray[$cleanKey]['alert'] .= ", " . $array['alert'];
            }
        } else {
            $id = $array['id'];
            unset($array['id']);
            $cleanArray[$id] = $array;
        }
    }
} else {
    $id = $array['id'];
    unset($array['id']);
    $cleanArray[$id] = $array;
}
}
echo"<pre>";
print_r($cleanArray);

【讨论】:

    【解决方案2】:

    这可能会对你有所帮助。

      $arr1 = array(
            "id" => 205,
            "firstName" => "NANCY GEORGE",
            "gender" => "F",
            "age" => 21,
            "alert" => "bmi"
        );
        $arr2 = array(
            "id" => 205,
            "firstName" => "NANCY GEORGE",
            "gender" => "F",
            "age" => 21,
            "alert" => "bp"
        );
        $arr3 = array(
            "id" => 206,
            "firstName" => "KUTAPPA.A.C",
            "gender" => "M",
            "age" => 31,
            "alert" => "bmi"
        );
        $arr4 = array($arr1, $arr2, $arr3);
    
    
        $n = count($arr4);
    
        for($i=0; $i<=$n; $i++){
            if($arr4[$i]['id'] == $arr4[$i+1]['id']){
                $id = $arr4[$i]['id'];
                foreach($arr4[$i] as $key=>$value){
                    if($arr4[$i][$key] <> $arr4[$i+1][$key]){
                        $str = array($arr4[$i][$key], $arr4[$i+1][$key]);
                        $str = implode(',', $str);
                        $arr5[$id][$key] = $str;
                    }
                    else {
                        $arr5[$id][$key] = $arr4[$i][$key];
                    }
                }
                $i++;
            }
            elseif($arr4[$i]['id'] <> $arr4[$i+1]['id']) {
                $id = $arr4[$i]['id'];
                $arr5[$id] = $arr4[$i];
            }
    
        }
    
        print_r($arr5);
    

    输出-

    Array
    (
        [205] => Array
            (
                [id] => 205
                [firstName] => NANCY GEORGE
                [gender] => F
                [age] => 21
                [alert] => bmi,bp
            )
    
        [206] => Array
            (
                [id] => 206
                [firstName] => KUTAPPA.A.C
                [gender] => M
                [age] => 31
                [alert] => bmi
            )
    
    )
    

    【讨论】:

      【解决方案3】:

      试试吧……

         <?php 
         $array = array ( 
         $array1 = array(
              "id" => 205,
              "firstName" => "NANCY GEORGE",
              "gender" => "F",
              "age" => 21,
              "alert" => "bmi"
          ),
          $array2 = array(
              "id" => 205,
              "firstName" => "NANCY GEORGE",
              "gender" => "F",
              "age" => 21,
              "alert" => "bp"
          ),
          $array3 = array(
              "id" => 206,
              "firstName" => "KUTAPPA.A.C",
              "gender" => "M",
              "age" => 31,
              "alert" => "bmi"
          )
      );
      echo "<pre>"; print_r($array);
      
      $newArray =array();  
      foreach($array as $key => $val)
      {  
          $newArray[$val['id']] = $val;
      }
      echo "<pre>"; print_r($newArray);
      
      ?>
      

      输出

      Array
      (
          [205] => Array
              (
                  [id] => 205
                  [firstName] => NANCY GEORGE
                  [gender] => F
                  [age] => 21
                  [alert] => bp
              )
      
          [206] => Array
              (
                  [id] => 206
                  [firstName] => KUTAPPA.A.C
                  [gender] => M
                  [age] => 31
                  [alert] => bmi
              )
      
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多