替换数组中的一个字符串,但在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;
}, []);