• 技术文章 >后端开发 >php教程

    显示不相邻的数据

    2016-06-23 13:52:20原创371
    已知$arrs,
    array (  0 =>   array (    'pono' => 'a',    'no' => '4711',  ),  1 =>   array (    'pono' => 'a',    'no' => '4714',  ),  2 =>   array (    'pono' => 'b',    'no' => '4714',  ),  3 =>   array (    'pono' => 'b',    'no' => '4715',  ),  4 =>   array (    'pono' => 'c',    'no' => '4715',  ),  5 =>   array (    'pono' => 'c',    'no' => '4716',  ),)


    现将同pono的数据合并,得:
    $tmp=array();$data=array();$i=0;foreach($arrs as $key=>$arr){		if(!empty($tmp) && array_key_exists($arr['pono'],$tmp)){        $key=$tmp[$arr['pono']];        $arr_no=explode(',',$data[$key]['no']);        if(!in_array($arr['no'],$arr_no)) $data[$key]['no'].=','.$arr['no'];    }else{        $tmp[$arr['pono']]=$i;        $data[$i++]=$arr;    }}print_r($data);//得到结果:Array(    [0] => Array        (            [pono] => a            [no] => 4711,4714        )    [1] => Array        (            [pono] => b            [no] => 4714,4715        )    [2] => Array        (            [pono] => c            [no] => 4715,4716        ))


    现在想求仅显示不相邻的no,如例中的项:
    [0] => Array
    (
    [pono] => a
    [no] => 4711,4714
    )

    请问怎么求?


    回复讨论(解决方案)

    $arrs = array (  0 =>   array (    'pono' => 'a',    'no' => '4711',  ),  1 =>   array (    'pono' => 'a',    'no' => '4714',  ),  2 =>   array (    'pono' => 'b',    'no' => '4714',  ),  3 =>   array (    'pono' => 'b',    'no' => '4715',  ),  4 =>   array (    'pono' => 'c',    'no' => '4715',  ),  5 =>   array (    'pono' => 'c',    'no' => '4716',  ),);$tmp=array();$data=array();$i=0;foreach($arrs as $key=>$arr){        if(!empty($tmp) && array_key_exists($arr['pono'],$tmp)){        $key=$tmp[$arr['pono']];        $arr_no=explode(',',$data[$key]['no']);        if(!in_array($arr['no'],$arr_no)) $data[$key]['no'].=','.$arr['no'];    }else{        $tmp[$arr['pono']]=$i;        $data[$i++]=$arr;    }}print_r($data);$result = array();foreach($data as $val){	list($a, $b) = explode(',', $val['no']);	if(abs($a-$b)!=1){		array_push($result, $val);	}}print_r($result);


    Array(    [0] => Array        (            [pono] => a            [no] => 4711,4714        ))



    非常感谢!

       array (    'pono' => 'a',    'no' => '4711',  ),  1 =>   array (    'pono' => 'a',    'no' => '4714',  ),  2 =>   array (    'pono' => 'b',    'no' => '4714',  ),  3 =>   array (    'pono' => 'b',    'no' => '4715',  ),  4 =>   array (    'pono' => 'c',    'no' => '4715',  ),  5 =>   array (    'pono' => 'c',    'no' => '4716',  ),  6 =>   array (    'pono' => 'a',    'no' => '4712',  ),  7 =>   array (    'pono' => 'a',    'no' => '4713',  ),  8 =>   array (    'pono' => 'a',    'no' => '4719',  ),);$tmp=array();$data=array();$i=0;foreach($arrs as $key=>$arr){        if(!empty($tmp) && array_key_exists($arr['pono'],$tmp)){        $key=$tmp[$arr['pono']];        $arr_no=explode(',',$data[$key]['no']);        if(!in_array($arr['no'],$arr_no)) $data[$key]['no'].=','.$arr['no'];    }else{        $tmp[$arr['pono']]=$i;        $data[$i++]=$arr;    }}print_r($data);$result = array();foreach($data as $val){	$tmp = explode(',', $val['no']);	if(!checkSerialNum($tmp)){		array_push($result, $val);	}}print_r($result);// 判????元素是否???字function checkSerialNum($arr){	asort($arr);	$arr = array_values($arr);	for($i=0,$len=count($arr)-1; $i<$len; $i++){		if(abs($arr[$i]-$arr[$i+1])!=1){			return false;		}	}	return true;}?>

    ?化了一下,可以支持'no'不指定2??值的情?。

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:相邻 显示 数据
    上一篇:SMARTY 二次循环的请教 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 工具包分享:PHP实现滑块验证图片• 请教QQ互联的代码是如何写的? • 没有上载的分数了,vip次数也用完了啊 • PHP登录跳转,该怎么处理 • 注册信息添加到数据库,该怎么处理
    1/1

    PHP中文网