doutuo7156 2016-01-28 21:49 采纳率: 100%
浏览 69
已采纳

通过值保留键折叠PHP数组元素(非唯一)

Ive worked on this so long that I must be over complicating a simple solution.

Given the following in arrays

    $in_num = array('a'=>1, 'b'=>1, 'c'=>2, 'd'=>1, 'e'=>2, 'f'=>2, 'g'=>2, 'h'=>2);  
    $in_str = array('a'=>'a', 'b'=>'a', 'c'=>'b', 'd'=>'a', 'e'=>'b', 'f'=>'b', 'g'=>'b);  

Desired output

    $out_num = array('a'=>1, 'c'=>2, 'd'=>1, 'e'=>2);   
    $out_str = array('a'=>'a', 'c'=>'b', 'd'=>'a', 'e'=>'b');  

The Key order must be maintained.

array('a'=>1, 'b'=>'str') does NOT occur.  

Sure would appreciate your help.

  • 写回答

2条回答 默认 最新

  • douyi3676 2016-01-28 22:22
    关注

    What you really want to know and preserve is the key/value pair that differs from the previous value. This can be done with a simple function

    function collapse($array = array()) {
        //initialize the answer and previous value
        $ans = array();
        $prevValue = null;
    
        foreach($array as $key=>$val) {
            //we only care if the current $val is different than the previous $value
            if ($val != $prevValue) {
                $ans[$key] = $val;
            }
            //save the current value as the previousValue for the next iteration
            $prevValue = $val;
        }
        return $ans;
    }
    

    This will return what you are asking when called with collapse($in_num) or collapse($in_str).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上