php数组去重 现在我有一个这样的数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php数组去重 现在我有一个这样的数组相关的知识,希望对你有一定的参考价值。
array
0 =>
array
'id' => string '1' (length=1)
'treat_method' => string '手术,西医药物' (length=19)
'disease_name' => string '弓形虫病' (length=12)
'medical_title' => string '弓形虫病' (length=12)
1 =>
array
'id' => string '6' (length=1)
'treat_method' => string '手术' (length=6)
'disease_name' => string '大于胎龄儿' (length=15)
'medical_title' => string '你好a ' (length=8)
2 =>
array
'id' => string '7' (length=1)
'treat_method' => string '手术' (length=6)
'disease_name' => string '大于胎龄儿' (length=15)
'medical_title' => string '你好' (length=6)
3 =>
array
'id' => string '8' (length=1)
'treat_method' => string '西医药物' (length=12)
'disease_name' => string '大于胎龄儿' (length=15)
'medical_title' => string '你好' (length=6)
我想要这个数组里面的所有['treat_method']的值,并且去除重复的只留下最终的‘手术 西医药物’
求高手指点啊
0 =>
array(
'id' => '1' ,
'treat_method' =>'手术,西医药物',
'disease_name' =>'弓形虫病',
'medical_title' =>'弓形虫病'),
1 =>
array(
'id' => '6' ,
'treat_method' =>'手术',
'disease_name' =>'大于胎龄儿' ,
'medical_title' =>'你好a'),
2 =>
array(
'id' => '7' ,
'treat_method' =>'手术',
'disease_name' =>'大于胎龄儿',
'medical_title' =>'你好'),
3 =>
array(
'id' =>'8',
'treat_method' =>'西医药物',
'disease_name' =>'大于胎龄儿',
'medical_title' =>'你好')
);
echo "<pre>";
$total=count($demo);
for($i=0;$i<$total;$i++)
if($demo[$i]['treat_method']!='手术,西医药物')
unset($demo[$i]);
print_r($demo);
试试,是不是你的要求
追问现在是我想要的结果,但是假如我后来又添加了数组,比如这样4 =>
array(
'id' =>'9',
'treat_method' =>'化疗,心理治疗',
'disease_name' =>'大于胎龄儿',
'medical_title' =>'你好')
);
。。。这个方法还适合吗
这个方法说白了就是:
循环遍历该数组;
如果数组的某个键值中二维键位‘treat_method’的值不等于‘手术,西医药物’,那么这个键值对将被删除。
所以这个方法还合适;
你可以试试
我现在治疗方法是固定的就这些(手术,西医药物,推拿,化疗中药,放疗,生物治疗,运动治疗,心理治疗,其它),我想要的最终结果就是如果这个病有哪种方法我就显示哪种方法,但是不要重复,那我用你的方法这样写的
if($demo[$i]['treat_method']!='手术,西医药物,推拿,化疗中药,放疗,生物治疗,运动治疗,心理治疗,其它')
对吗
可是我一打印,就变成空的了...怎么回事
如果你是这种要求的话,
那么我的方法不适应。
而且你这个数组也不好处理,因为键值中存的治疗方法,有的是单个‘手术’,有的却是‘手术,西医药物’这样多个的。
所以算法还得复杂点
是呀,那这种方法应该怎么做呢??
追答你能给我列出一份完整一点数组么;
就是,要分析的数组肯定是这种格式的。
还有就是结果是什么样的举个例;
我的数组就是这样的我刚发的那样格式,肯定是那样的格式,但是现在数据就那么多,以后才会添加更多数据,现在的数据是用来测试的,我想要的结果就是显示所有的治疗方法,但是不重复你看我现在的结果
等我忙完手头的活,帮你弄弄
追问嗯嗯,谢谢,等你哈,别把我忘了
追答$treat_method=array();//定义一个新数组;$demo就是上面的那个数据数组;for($i=0;$i<count($demo);$i++)//通过循环的方式将原始数组内treat_method键的值放入新数组中;
if(strpos($demo[$i]['treat_method'],','))//判断一下值是否是这样的“手术,西医药物”,是的话就拆分放入;
$explode_arr = array();
$explode_arr = explode(',',$demo[$i]['treat_method']);//拆分;
for($ii=0;$ii<count($explode_arr);$ii++)//放入;
$treat_method[]=$explode_arr[$ii];
else
$treat_method[]=$demo[$i]['treat_method'];//正常值"西医药物",直接插入;
//完成后$treat_method就是一个包含所有方法的一维数组;然后用php自带的函数去重复,合并成字符串,就是你的效果了;
$treat_method=implode(',',array_unique($treat_method));
echo $treat_method; 参考技术A $new = array();
foreach ( $array as $val )
$new[] = $val['treat_method'];
$new = array_flip(array_flip($new));
var_dump($new);
应该会显示
array('手术,西医药物','手术','西医药物');追问我想要这样的array('手术 西医药物‘)就没了后面的算是重复的不要了
追答function bijiao(&$arr,$v)foreach ( $arr as $key => $val )
// 元素包含$v
if ( strpos($val,$v) !== FALSE )
return;
// $v中包含元素,替换
if ( strpos($v,$val) !== FALSE )
$arr[$key] = $v;
return;
// 互不包含,增加为新元素
$arr[] = $v;
// $array 为你提供的数组,$new为处理后的数组
$new = array();
foreach ( $array as $val )
bijiao($new,$val['treat_method'])
var_dump($new);
看着真着急啊,我这个函数不是已经解决了你的问题吗。
就是比较字符串是否包含,最终输出
array('手术,西医药物')
如果你再加上”推拿","化疗中药“也会自动判断是否包含。最终输出
array('手术,西医药物','推拿','化疗中药')
PHP使用array_unique对二维数组去重处理
PHP使用array_unique对二维数组去重处理【转】
array_unique函数就是可以处重的,它具备了这个功能了,下面我们一来看一个关于PHP使用array_unique对二维数组去重处理例子。
php 5.2.9 版本增加了array_unique对多维数组的支持,在处理多维数组是需要设置sort_flags参数
一维数组的重复项:
使用array_unique函数即可,使用实例如下:
代码如下 复制代码
<?php
$aa = array("apple", "banana", "pear", "apple", "wail", "watermalon");
$bb = array_unique($aa);
print_r($bb);
?>
结果如下:
Array ( [0] => apple [1] => banana [2] => pear [4] => wail [5] => watermalon )
二维数组去重项
代码如下 复制代码
例如:
$result = array(
0=>array(‘a‘=>1,‘b‘=>‘Hello‘),
1=>array(‘a‘=>1,‘b‘=>‘other‘),
2=>array(‘a‘=>1,‘b‘=>‘other‘),
);
处理成
$result = array(
0=>array(‘a‘=>1,‘b‘=>‘Hello‘),
1=>array(‘a‘=>1,‘b‘=>‘other‘)
);
使用方法
array_unique($result, SORT_REGULAR);
二维数组的重复项:
对于二维数组咱们分两种情况讨论,一种是因为某一键名的值不能重复,删除重复项;另一种因为内部的一维数组不能完全相同,而删除重复项,下面举例说明:
㈠因为某一键名的值不能重复,删除重复项
PHP代码如下 复制代码
<?php
function assoc_unique($arr, $key) {
$tmp_arr = array();
foreach ($arr as $k => $v) {
if (in_array($v[$key], $tmp_arr)) {//搜索$v[$key]是否在$tmp_arr数组中存在,若存在返回true
unset($arr[$k]);
} else {
$tmp_arr[] = $v[$key];
}
}
sort($arr); //sort函数对数组进行排序
return $arr;
}
$aa = array(
array(‘id‘ => 123, ‘name‘ => ‘张三‘),
array(‘id‘ => 123, ‘name‘ => ‘李四‘),
array(‘id‘ => 124, ‘name‘ => ‘王五‘),
array(‘id‘ => 125, ‘name‘ => ‘赵六‘),
array(‘id‘ => 126, ‘name‘ => ‘赵六‘)
);
$key = ‘id‘;
assoc_unique(&$aa, $key);
print_r($aa);
?>
显示结果为:
Array ( [0] => Array ( [id] => 123 [name] => 张三 ) [1] => Array ( [id] => 124 [name] => 王五 ) [2] => Array ( [id] => 125 [name] => 赵六 ) [3] => Array ( [id] => 126 [name] => 赵六 ) )
㈡因内部的一维数组不能完全相同,而删除重复项
代码如下 复制代码
<?php
function array_unique_fb($array2D) {
foreach ($array2D as $v) {
$v = join(",", $v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;
}
$temp = array_unique($temp);//去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v) {
$temp[$k] = explode(",", $v);//再将拆开的数组重新组装
}
return $temp;
}
$aa = array(
array(‘id‘ => 123, ‘name‘ => ‘张三‘),
array(‘id‘ => 123, ‘name‘ => ‘李四‘),
array(‘id‘ => 124, ‘name‘ => ‘王五‘),
array(‘id‘ => 123, ‘name‘ => ‘李四‘),
array(‘id‘ => 126, ‘name‘ => ‘赵六‘)
);
$bb = array_unique_fb($aa);
print_r($bb)
?>
显示结果:
Array ( [0] => Array ( [0] => 123 [1] => 张三 ) [1] => Array ( [0] => 123 [1] => 李四 ) [2] => Array ( [0] => 124 [1] => 王五 ) [4] => Array ( [0] => 126 [1] => 赵六 ) )
来源:https://www.php.cn/php-sourcecode-284972.html
更多:
https://www.php.net/array_unique
php 二维数组根据某字段去重
以上是关于php数组去重 现在我有一个这样的数组的主要内容,如果未能解决你的问题,请参考以下文章