php去除数组中重复值,并返回结果!

本文详细介绍了如何从数据库中查询特定用户的订单编号,并通过PHP代码处理查询结果,包括将查询结果转换为数组,去除重复项,以及重新组织数组的过程。
$data = db('order')->field('ordernum')->where(array('user_id' => $user_id))->select();
查询的数组格式
array(16) {
  [0] => array(1) {
    ["ordernum"] => string(18) "190415165656156213"
  }
  [1] => array(1) {
    ["ordernum"] => string(18) "190415165656156213"
  }
  [2] => array(1) {
    ["ordernum"] => string(18) "190415165656156213"
  }
  [3] => array(1) {
    ["ordernum"] => string(18) "190415170056183687"
  }
  [4] => array(1) {
    ["ordernum"] => string(18) "190415170056183687"
  }
  [5] => array(1) {
    ["ordernum"] => string(18) "190415170056183687"
  }
  [6] => array(1) {
    ["ordernum"] => string(18) "190415170345120966"
  }
  [7] => array(1) {
    ["ordernum"] => string(18) "190415170345120966"
  }
  [8] => array(1) {
    ["ordernum"] => string(18) "190415170345120966"
  }
  [9] => array(1) {
    ["ordernum"] => string(18) "190416174929158053"
  }
  [10] => array(1) {
    ["ordernum"] => string(18) "190416174929158053"
  }
  [11] => array(1) {
    ["ordernum"] => string(18) "190416194457158437"
  }
  [12] => array(1) {
    ["ordernum"] => string(18) "190416194457158437"
  }
  [13] => array(1) {
    ["ordernum"] => string(18) "190416195027154990"
  }
  [14] => array(1) {
    ["ordernum"] => string(18) "190416195027154990"
  }
  [15] => array(1) {
    ["ordernum"] => string(18) "190417124518178758"
  }
}

foreach ($data as $k => $v) {
     $ordernum[] = $v['ordernum'];
}

ordernum数组格式

array(16) {
  [0] => string(18) "190415165656156213"
  [1] => string(18) "190415165656156213"
  [2] => string(18) "190415165656156213"
  [3] => string(18) "190415170056183687"
  [4] => string(18) "190415170056183687"
  [5] => string(18) "190415170056183687"
  [6] => string(18) "190415170345120966"
  [7] => string(18) "190415170345120966"
  [8] => string(18) "190415170345120966"
  [9] => string(18) "190416174929158053"
  [10] => string(18) "190416174929158053"
  [11] => string(18) "190416194457158437"
  [12] => string(18) "190416194457158437"
  [13] => string(18) "190416195027154990"
  [14] => string(18) "190416195027154990"
  [15] => string(18) "190417124518178758"
}

$ordernum = array_unique($ordernum); //去掉重复的字符串

去重后ordernum 数组格式

array(7) {
  [0] => string(18) "190415165656156213"
  [3] => string(18) "190415170056183687"
  [6] => string(18) "190415170345120966"
  [9] => string(18) "190416174929158053"
  [11] => string(18) "190416194457158437"
  [13] => string(18) "190416195027154990"
  [15] => string(18) "190417124518178758"
}

foreach ($ordernum as $k => $v) {
      $new_ordernum[] = $v; //拆分后的重组
}

产生的新数组格式

array(7) {
  [0] => string(18) "190415165656156213"
  [1] => string(18) "190415170056183687"
  [2] => string(18) "190415170345120966"
  [3] => string(18) "190416174929158053"
  [4] => string(18) "190416194457158437"
  [5] => string(18) "190416195027154990"
  [6] => string(18) "190417124518178758"
}
### PHP除数重复值的方法及函数 `array_unique` 在PHP中,`array_unique()` 是一个非常实用的函数,用于移除数中的重复值[^1]。该函数接受一个数组作为参数,返回一个新的数组,其中只保留原始数组中每个唯一的值一次。以下是一个简单的示例,展示如何使用 `array_unique()` 重一维数组: ```php <?php $a = array("a" => "Cat", "b" => "Dog", "c" => "Cat"); print_r(array_unique($a)); ?> ``` 输出结果为: ``` Array ( [a] => Cat [b] => Dog ) ``` 值得注意的是,`array_unique()` 在处理二维数组时无法直接生效,因为其设计初衷是针对一维数组。如果需要对二维数组进行重,则可以通过结合其他函数实现[^2]。例如,可以先使用 `array_map()` 将二维数组的每个子数组转换为字符串形式,然后调用 `array_unique()` 重,最后再将结果还原为二维数组。 以下是针对二维数组重示例: ```php <?php $data = array( array("id" => 1, "name" => "Alice"), array("id" => 2, "name" => "Bob"), array("id" => 1, "name" => "Alice") ); // 将二维数组转换为唯一标识符 $temp = array_map("serialize", $data); // 使用 array_unique 重 $unique = array_unique($temp); // 还原为二维数组 $result = array_map("unserialize", $unique); print_r($result); ?> ``` 输出结果为: ``` Array ( [0] => Array ( [id] => 1 [name] => Alice ) [1] => Array ( [id] => 2 [name] => Bob ) ) ``` 此外,需要注意 `array_unique()` 的行为特性:它会先将数组中的值作为字符串排序,然后对每个值只保留第一个遇到的键名,忽略所有后续重复键名。这不意味着未排序数组中第一个出现的键名会被保留[^3]。 ### 注意事项 - 如果需要对数组进行更复杂的重逻辑,可以考虑使用 `array_filter()` 或自定义回调函数。 - 对于关联数组,`array_unique()` 默认基于值进行比较,而不会考虑键名。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

withoutfear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值