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

时间:2017-07-11 08:48:10

标签: php

假设我有一个像这样的字符串数组:

$in_arr = ['a', 'a', 'b', 'b', 'a', 'b', 'b', 'a', 'a', 'b'];

我想要一种有效的方法将所有内容合并为单个值,但保持b不变,结果将是:

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

5 个答案:

答案 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"]