假设我有一个像这样的字符串数组:
$in_arr = ['a', 'a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b'];
我想要一种有效的方法将所有内容合并为单个值,但保持b不变,结果将是:
['a', 'b', 'b', 'a', 'b', 'b', 'a', 'b']
答案 0 :(得分:2)
这是一个可能的解决方案:
<?php
define('ASPECT', 'a');
$input = ['a', 'a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b'];
$output = [];
array_walk($input, function($entry) use (&$output) {
if (($entry != ASPECT) || (end($output) != ASPECT)) {
$output[] = $entry;
}
});
print_r($output);
输出显然是:
Array
(
[0] => a
[1] => b
[2] => b
[3] => a
[4] => b
[5] => b
[6] => a
[7] => b
)
答案 1 :(得分:1)
使用array_reduce:
$res = array_reduce($arr, function ($c, $i) {
if ( $i!='a' || end($c)!='a' )
$c[] = $i;
return $c;
}, []);
答案 2 :(得分:0)
使用简单的循环...
$in_arr = ['a', 'a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b'];
for ( $i = 0; $i <count($in_arr)-1; $i++ ) {
if ( $in_arr[$i] == 'a' && $in_arr[$i+1] == 'a') {
unset($in_arr[$i]);
}
}
print_r($in_arr);
答案 3 :(得分:0)
您可以遍历列表并仅将字符串添加到新列表中(如果它们不是您的键字符串,或者它们与前一个字符串不同,如下所示:
$in_arr = ['a', 'a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b'];
$new_arr = [];
$last = '';
$key = 'a';
foreach ($in_arr as $item) {
if ($key == $item and $item == $last) {
continue;
}
$last = $item;
array_push($new_arr, $item);
}
echo "[";
foreach( $new_arr as $value ){
echo $value.", ";
}
echo "]";
产生
[a, b, b, a, b, b, a, b, ]
修改:PHP sandbox
答案 4 :(得分:0)
您需要代码:
<?php
$in_arr = array('a', 'a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b');
$last_temp = '';
for($i=0;$i<count($in_arr);$i++)
{
if($last_temp == $in_arr[$i] && $in_arr[$i]=='a')
{
unset($in_arr[$i]);
$in_arr = array_values($in_arr);
}
else
{
$last_temp = $in_arr[$i];
}
}
echo json_encode($in_arr);
输出:
["a","b","b","a","b","b","a","b"]