我对此工作了很长时间,以至于我必须使一个简单的解决方案复杂化。
在数组中给出以下内容
$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);
期望的输出
$out_num = array('a'=>1, 'c'=>2, 'd'=>1, 'e'=>2);
$out_str = array('a'=>'a', 'c'=>'b', 'd'=>'a', 'e'=>'b');
必须保持关键顺序。
array('a'=>1, 'b'=>'str') does NOT occur.
当然会感谢你的帮助。
答案 0 :(得分:0)
您真正想知道和保留的是与先前值不同的键/值对。这可以通过一个简单的函数来完成
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;
}
这将通过collapse($in_num)
或collapse($in_str)
答案 1 :(得分:0)
<?php
$in_num = array('a'=>1, 'b'=>1, 'c'=>2, 'd'=>1, 'e'=>2, 'f'=>2, 'g'=>2, 'h'=>2);
$previous = '';
foreach( $in_num as $k=> $v){
if($v !=$previous){
$out[$k]=$v;
}
$previous=$v;
}
print_r($out);
输出:
Array
(
[a] => 1
[c] => 2
[d] => 1
[e] => 2
)