替换数组中的一个字符串,但在php中保持其他字符串不变

替换数组中的一个字符串,但在php中保持其他字符串不变,php,Php,假设我有一个字符串数组,如下所示: $in_arr = ['a', 'a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b']; 我希望有一种有效的方法将所有a合并为一个值,但保留b不变,因此结果将是: ['a', 'b', 'b', 'a', 'b', 'b', 'a', 'b'] 这是一个可能的解决方案: <?php define('ASPECT', 'a'); $input = ['a', 'a', 'b', 'b', 'a', 'b', 'b',

假设我有一个字符串数组,如下所示:

$in_arr = ['a', 'a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b'];
我希望有一种有效的方法将所有a合并为一个值,但保留b不变,因此结果将是:

['a', 'b', 'b', 'a', 'b', 'b', 'a', 'b']

这是一个可能的解决方案:

<?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);

您可以遍历列表,仅当字符串不是您的键字符串或与前一个字符串不同时,才将其添加到新列表中,如下所示:

$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
$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”加上边距,或者只是连续出现的“a”看起来像是连续出现的……是的,所以a的序列可能只是一个a,但所有b都应该保持原样
<?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"]
$res = array_reduce($arr, function ($c, $i) {
    if ( $i!='a' || end($c)!='a' )
        $c[] = $i;
    return $c;
}, []);