将数组中的值替换为周围的null,0

时间:2016-10-27 07:12:50

标签: 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,其余应为空。

这里最好的策略是什么?

6 个答案:

答案 0 :(得分:2)

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

1.Element为零。

2.设置前一个元素,它等于零或为空。

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

答案 1 :(得分:2)

使用运算符优先级:

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

答案 2 :(得分:0)

我认为它应该适合你:

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

?>

答案 3 :(得分:0)

我们需要检查三个条件:是否有,prev。为零,接下来为零。 您可以将前两个条件组合到第三个条件中。 为了简单起见,打破了它。

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

$newArray = [];

foreach ($array as $key => $val) {

    $previous = NULL;
    $next = NULL;

    if (isset($array[$key + 1])) {
        $next = $array[$key + 1];
    }

    if ($key != 0) {
        $previous = $array[$key - 1];
    }

    if ($val === 0 && $next == 0 && $previous == 0) {
        $newArray[] = 'NULL';
    } else {
        $newArray[] = $val;
    }

}

答案 4 :(得分:0)

另一种方法:

$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>';

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

答案 5 :(得分:-1)

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