Php 用周围的null 0替换数组中的值

Php 用周围的null 0替换数组中的值,php,algorithm,Php,Algorithm,所以我有一个整数值的集合,它是由另一个函数的结果构建的,这个函数每次都有不同的值。在PHP中考虑以下内容: $arr = [0,0,2,2,0,0,0,3,3]; 我需要将其转换为: $newArr = [null,0,2,2,0,null,0,3,3]; 我想要完成的是:如果一个值大于0,它的邻居应该是0,其余的应该是null 这里最好的策略是什么 在整个数组中循环,我们评估每个元素的三个条件: 1.元素为零 2.设置了上一个元素,该元素等于零或空 <?php foreach

所以我有一个整数值的集合,它是由另一个函数的结果构建的,这个函数每次都有不同的值。在PHP中考虑以下内容:

$arr = [0,0,2,2,0,0,0,3,3];
我需要将其转换为:

$newArr = [null,0,2,2,0,null,0,3,3];
我想要完成的是:如果一个值大于0,它的邻居应该是0,其余的应该是null


这里最好的策略是什么

在整个数组中循环,我们评估每个元素的三个条件:

1.元素为零

2.设置了上一个元素,该元素等于零或空

<?php
    foreach($array as $key => $element)
    {
        if($element == 0 && ((isset($array[$key - 1]) && !$array[$key - 1]) || (isset($array[$key + 1]) && !$array[$key + 1])))
        {
            $array[$key] = null;
        }
    }
?>
3.设置下一个元素,该元素等于零或空

<?php
    foreach($array as $key => $element)
    {
        if($element == 0 && ((isset($array[$key - 1]) && !$array[$key - 1]) || (isset($array[$key + 1]) && !$array[$key + 1])))
        {
            $array[$key] = null;
        }
    }
?>

我认为它应该适合您:

<?php
$arr = [0,0,2,2,0,0,0,3,3];
$new_array = $arr;

$array_count = count($arr);

for ($i=0; $i<$array_count; $i++) {
    if ($i == 0 && $arr[$i+1] == 0) {   
        $new_array[$i] = null;
    } elseif ($i == ($array_count-1) && $arr[$i-1] == 0) {  
        $new_array[$i] = null;
    } elseif ($arr[$i-1] == 0 && $arr[$i+1] == 0) {     
        $new_array[$i] = null;
    }
}
echo "<pre>";
print_r($new_array);

?>

我们需要检查三个条件:是否存在,prev。是零,下一个是零。 可以将前两个条件合并为第三个条件。 为了简单起见把它分解了

$arr = [0,0,2,2,0,0,0,3,3];

foreach($arr as $key => $value){
    if($arr[$key] > 0 && isset($arr[$key - 1]) && $arr[$key - 1] == 0){
        if(isset($arr[$key - 2]) && $arr[$key - 2] == 0){
            $arr[$key - 2] = null;  
        }
    }
    if($arr[$key] > 0 && isset($arr[$key + 1]) && $arr[$key + 1] == 0){
        if(isset($arr[$key + 2]) && $arr[$key + 2] == 0){
            $arr[$key + 2] = null;  
        }
    }
}
echo '<pre>';
print_r($arr);
echo '</pre>';

另一种方法是:

$zero = true;

$arr = [0,0,2,2,0,0,0,3,3];
$newArr = [];

foreach($arr as $k=>$v) {
    if ($v) {
        $newArr[] = $v;
        $zero = false;
    } else {
        if ($zero and isset($arr[$k+1]) && !$arr[$k+1] || !isset($arr[$k+1]))
            $newArr[] = null;
        else
            $newArr[] = 0;

        $zero = true;
    }
}

print_r($newArr);
$arr=[0,0,2,2,0,0,0,3,3];
foreach($arr作为$key=>$value){
如果($arr[$key]>0&&isset($arr[$key-1])&&$arr[$key-1]==0){
如果(isset($arr[$key-2])&&$arr[$key-2]==0){
$arr[$key-2]=null;
}
}
如果($arr[$key]>0&&isset($arr[$key+1])&&$arr[$key+1]==0){
如果(isset($arr[$key+2])&&$arr[$key+2]==0){
$arr[$key+2]=null;
}
}
}
回声';
印刷费($arr);
回声';

在这里,我首先查找正值,然后检查邻居是否为0,然后将邻居的邻居设置为null。

使用运算符优先级:


下面的答案:)应该对你们有用。非常感谢你们的投入,我已经接受了@Casimir et Hippolyte最有帮助的答案。坚持下去!你总是可以投票支持那些同样有效的;)谢谢我希望我可以,但我还没有足够的声誉:(为什么OP“尝试这个”?一个好的答案总是会解释做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。
<?php

    $arr        = [0,0,2,2,0,0,0,3,3];
    $extra      = [];


    for($x=0; $x<count($arr); $x++){
        if($arr[$x] == 0){
            $tmp = isset($tmp)?$tmp:[];
            $tmp[]=$x;
        }else{
            if(isset($tmp)){
                $extra[]  = $tmp;
                unset($tmp);
            }
        }
    }
    foreach($extra as $subArr){
        if(count($subArr) == 2){
            $arr[$subArr[0]] = null;
            $arr[$subArr[1]] = 0;
        }else if(count($subArr) == 3){
            $arr[$subArr[0]] = 0;
            $arr[$subArr[1]] = null;
            $arr[$subArr[2]] = 0;
        }
    }
    var_dump($arr);
    // YIELDS::
        array (size=9)
          0 => null
          1 => int 0
          2 => int 2
          3 => int 2
          4 => int 0
          5 => null
          6 => int 0
          7 => int 3
          8 => int 3