2016-10-27 7 views
3

私は毎回異なる値を持つことができる別の関数の結果から構築された整数値のコレクションを持っています。私はに変換する必要があり配列内の値を周囲のnullに置き換えます。0

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

::私が達成したい何

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

は次のとおりです。PHPで次のように考えてみ値が> 0である場合は、その隣人は0であるべきであり、残りの部分nullにする必要があります。

ここで最善の戦略は何ですか?

+0

回答。 –

+0

皆さんのご意見をありがとうございました。私は@Casimir et Hippolyteが一番助けた答えを受け入れました。がんばり続ける! – krikkaa

+0

あなたはいつもあまりにも働いたものを投票することができます;)ありがとう! –

答えて

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); 
+0

これは意図したとおりに動作します、ありがとうございます! – krikkaa

2

配列全体をループ、我々は三つの条件のための各要素を評価:

1.Elementはゼロです。

2.前の要素が設定され、ゼロまたはnullに等しい。

3.次の要素が設定され、ゼロまたはnullに等しい。

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

?> 
+0

OPはなぜ "これを試してください"?***良い答え***は何が行われたのか、なぜそれが行われたのかについての説明を常に持っていますこのようなやり方は、OPだけでなく、将来の訪問者のために。 –

0

私たちは三つの条件をチェックする必要がありますがあり、前のページ。次はゼロです。 最初の2つの条件を3つめの条件に組み合わせることができます。 簡単にするためにそれを壊しました。

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

} 
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であるならば、nullに隣の隣を設定しています。

-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 
関連する問題