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']的值,并且去除重复的只留下最终的‘手术 西医药物’

求高手指点啊

$demo=array(
  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数组去重 现在我有一个这样的数组的主要内容,如果未能解决你的问题,请参考以下文章

php数组去重方法

请教thinkphp 二维数组值去重怎么去的哦

php 多个 一维数组 去重 组成新数组

php数组去重

更快的方式实现PHP数组去重

php数组去重(一维数组)