数组操作系列之循环去重

<?php
       $where = '  1 GROUP BY `city`';
       $data = Store::getList($where);
       if ($data) {
               $thisgroup = '';
           $k = -1;
           for ($j = 0; $j < count($data); $j++) {
                       if ($data[$j]['province'] != $thisgroup) {
                               $k++;
                   $temp1[$k]['id'] = $data[$j]['province'];
                   $temp1[$k]['province'] = Area::Redis_getField($data[$j]['province']);
                   $temp1[$k]['select'] = 0;
                   if ($province_id == $data[$j]['province']) {
                                       $temp1[$k]['select'] = 1;
                   }
                   $thisgroup = $data[$j]['province'];
                   $act = "new";
               } else {
                               $act = "merge";
               }

               $select = 0;
               if ($city_id == $data[$j]['city']) {
                               $select = 1;
               }
               if ($act == "new") {
                               $m = 0;
                   $temp1[$k]['data'][$m] = [
                                       'id' => $data[$j]['city'],
                       'name' => Area::Redis_getField($data[$j]['city']),
                       'select' => $select
                   ];
                   $m++;
               } else {
                               $temp1[$k]['data'][$m] = [
                                       'id' => $data[$j]['city'],
                       'name' => Area::Redis_getField($data[$j]['city']),
                       'select' => $select
                   ];
                   $m++;
               }

               array_push($temp1[$k]['data'], ['id' => 0, 'name' => '全部', 'select' => $city_id == 0 ? 1 : 0]);
           }

           array_push($temp1, ['id' => 0, 'province' => '全部', 'select' => $province_id == 0 ? 1 : 0, 'data' => [['id' => 0, 'name' => '全部', 'select' => $province_id == 0 ? 1 : 0]]]);
           $id = array();
           foreach ($temp1 as $v) {
                       $id[] = $v['id'];
           }
           array_multisort($id, SORT_ASC, $temp1);

           foreach ($temp1 as $key => $val) {

                       $t = $val['data'];
               $cid = array();
               foreach ($t as $v) {
                               $cid[] = $v['id'];
               }
//                array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。
// 注释:字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。
// 注释:您可以在每个数组后设置排序顺序和排序类型参数。如果没有设置,每个数组参数会使用默认值。
              array_multisort($cid, SORT_ASC, $t);
               $temp1[$key]['data'] = $t;

           }

       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用双重循环来实现Java数组去重,其外层循环遍历数组的每一个元素,内层循环则从当前元素的下一个位置开始遍历,如果找到了与当前元素相同的元素,则将该元素删除。具体实现可以参考以下代码: ```java public static int[] removeDuplicates(int[] arr) { int len = arr.length; for (int i = 0; i < len; i++) { for (int j = i + 1; j < len; j++) { if (arr[i] == arr[j]) { arr[j] = arr[len - 1]; // 将重复元素替换为数组末尾的元素 len--; // 数组长度减1 j--; // 内层循环变量j也要减1,以便检查替换后的新元素 } } } // 创建一个新数组,将去重后的元素复制到新数组 int[] newArr = new int[len]; System.arraycopy(arr, 0, newArr, 0, len); return newArr; } ``` 这个方法可以处理任何类型的Java数组,包括int、double、String等。 ### 回答2: 要用for循环对Java数组进行去重,可以按照以下步骤进行操作: 1. 创建一个新的空数组来存放去重后的元素。 2. 使用for循环遍历原数组的每个元素。 3. 在循环,使用一个flag变量来判断当前元素是否已经存在于新数组。 4. 再次使用一个嵌套的for循环遍历新数组的元素,与当前元素进行比较。 5. 如果找到相同的元素,则将flag设置为true,表示当前元素重复。 6. 如果在内部循环结束后,flag仍然为false,则表示当前元素是唯一的,可以将其添加到新数组。 7. 最后,将新数组返回作为去重后的结果。 以下是一个简单的示例代码: ```java public class ArrayDuplicateRemoval { public static void main(String[] args) { int[] arr = {1, 2, 3, 2, 4, 3, 5}; int[] newArr = removeDuplicates(arr); System.out.println("去重后的数组为:"); for (int i = 0; i < newArr.length; i++) { System.out.print(newArr[i] + " "); } } public static int[] removeDuplicates(int[] arr) { int[] newArr = new int[arr.length]; int index = 0; for (int i = 0; i < arr.length; i++) { boolean flag = false; for (int j = 0; j < index; j++) { if (arr[i] == newArr[j]) { flag = true; break; } } if (!flag) { newArr[index++] = arr[i]; } } int[] result = new int[index]; System.arraycopy(newArr, 0, result, 0, index); return result; } } ``` 以上代码,我们通过两次for循环来实现去重功能。时间复杂度为O(n^2),即需要遍历两次数组。最后将去重后的结果赋值给新的数组,并返回。 ### 回答3: java数组去重可以使用for循环来实现。可以使用两层for循环进行遍历,比较数组的元素是否重复。首先,外层for循环遍历数组的每一个元素,内层for循环则用来比较当前元素和后面的元素是否相等。如果相等,则使用数组的System.arraycopy()方法将后面的元素向前移动一位,从而实现去重。 以下是使用for循环实现数组去重的示例代码: ```java public static void removeDuplicates(int[] arr) { int len = arr.length; int[] result = new int[len]; int k = 0; for (int i = 0; i < len; i++) { boolean isDuplicate = false; // 检查当前元素是否在之前的元素重复 for (int j = 0; j < i; j++) { if (arr[i] == arr[j]) { isDuplicate = true; break; } } // 如果不重复,则将当前元素添加到结果数组 if (!isDuplicate) { result[k++] = arr[i]; } } // 输出去重后的结果数组 for (int i = 0; i < k; i++) { System.out.print(result[i] + " "); } } public static void main(String[] args) { int[] arr = {1, 3, 2, 2, 1, 5, 6, 4, 5}; removeDuplicates(arr); } ``` 以上代码,首先定义了一个长度和原始数组相同的结果数组result,用来存放去重后的元素。然后使用外层for循环遍历数组的每一个元素,内层for循环用来比较当前元素和之前的元素是否有重复。如果没有重复,则将当前元素添加到结果数组。最后,使用for循环输出去重后的结果数组。 执行以上代码,输出结果为:1 3 2 5 6 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值