PHP は配列のマージを実現します
先日、ある項目が同じ場合はその行を統合し、数値項目を追加して表示するようにというレポートを作成しました。
まず、配列を走査し、配列の最後の項目を取り出して他の項目と比較することを検討します。条件が満たされている場合は、マージ操作を実行して項目を削除します。
しかし実際に動作させてみると、3回実行しても実行されないことが分かり、その時の配列長は6でした。なぜ実行し続けないのか全く分かりませんでした。配列は & 参照を使用して削除され、削除された項目は元の配列に影響を与えます。
後で方法を考えましたが、削除するとトラバースに影響するため、削除せずに項目の値を空に設定します。最後に、array_filter を使用して null 値を除外します。
コードは次のとおりです
//合并itemsearch的结果 private function mergeList(&$arr) { $data = array(); $n = &$arr; foreach ($n as $key => $value) { if(!$value) continue; array_push($data,$this->getItem($value,$n)); } return array_filter($data); } private function getItem(&$item,&$arr){ foreach ($arr as $key => $value) { if(!$value) { continue; }; if($item["itemTypeName"] == $value["itemTypeName"] && $item["weight"] == $value["weight"] && $item["type"] == $value["type"]){ if($item["itemTypeId"] == $value["itemTypeId"] && $item["warehouseId"] == $value["warehouseId"]){ continue; }else{ $item["stockIn"] += $value["stockIn"]; $item["remain"] += $value["remain"]; $item["stockOut"] += $value["stockOut"]; $item["stockIn"] = sprintf("%.4f",$item["stockIn"]); $item["remain"] = sprintf("%.4f",$item["remain"]); $item["stockOut"] = sprintf("%.4f",$item["stockOut"]); $arr[$key] = ""; } } } return $item; }