2016-06-25 13 views
1

特定の値で選択された配列内の配列全体を削除したい。 これは私がこれまでに得たコードです。値でPHP配列からPHP配列を削除

私はすべてのサブアレイでアレイの設定を解除してから、サブアレイを挿入して戻ってきたので、もっと大きくても多くのアレイで大きなパフォーマンス上の問題が発生する可能性があります。

私の質問には、以下のコードを最適化する方法や、1つの配列を削除して残りの部分を手つかずのままにする方法がありますか?

感謝:)

<?php 

$currentValue = '#6'; 

$otherValue = [ "ID" => '2', "valueID" => '#6' ]; 
$otherValue2 = [ "ID" => '3', "valueID" => '#7' ]; 
$otherValue3 = [ "ID" => '4', "valueID" => '#8' ]; 
$valueArray = [ $otherValue, $otherValue2, $otherValue3 ]; 

echo 'current value: '.$currentValue; 
echo '<br><br>'; 
print_r($valueArray); 
echo '<br><br>'; 
foreach($valueArray as $key => $value) { 
    echo 'Value: '; 
    print_r($value); 
    if(($key = array_search($currentValue, $value)) !== false) { 
     echo ' - true, '.$currentValue.' is in $value<br>'; 

     unset($value); 
     unset($valueArray); 

     if(isset($value)) { 
      print_r($value); 
      echo '<br>'; 
     } else { 
      echo '$value was deleted<br><br>'; 
     } 
    } else { 
     echo ' - false<br>'; 
     $valueArray[] = $value; 
    } 

} 
echo '<br>'; 
print_r($valueArray); 

?> 
+0

checkoutしたいかもしれませんcodereview.stackexchange.com –

+0

'$ currentValue'が検索される配列のどこにあるのかわからないので、' array_search() 'を使っていますか?それが常に 'valueID'キーの下にある場合、この具体的なキー' check(value ['valueID'] === $ currentValue){...} 'または' return $ value ['valueID'] = == $ currentValue; 'trincotの答えが – shudder

+0

@shudderの場合、実際には私のコードでは'!== 'になります。 – trincot

答えて

1

値で検索が全く見つけ、または最後のサブ配列にされていない場合にあなたのコードは、例えば、多くの場合、間違った結果を返します。これは、次の行である:

unset($valueArray); 

$valueArray[] = $value; 

最初の文が第二で行われた前回の結果を破壊します。あるいは、最初の行が実行されない場合、2番目の行は元の配列に追加され、元の配列の2倍になります。

代わりに、あなたはarray_filterを使用することができます。

$valueArray = array_filter($valueArray, function ($value) use ($currentValue) { 
    return array_search($currentValue, $value) === false; 
}); 

は、それがeval.in上で実行を参照してください。

@shudderがコメントに書いているように、すべてのキーの値を検索するのは奇妙です。あなたが与えた例では、valueIDキーの下にそれが見つかると思われます。その場合

あなたはあなたのコードを最適化して行うことができます。

$valueArray = array_filter($valueArray, function ($value) use ($currentValue) { 
    return $value['valueID'] !== $currentValue; 
}); 

は、それがeval.in上で実行を参照してください。

+0

array_filterは使用しませんでしたが、試してみましょう。 – Antari24

+0

OK、shudderからのコメントと、今追加した段落にも注意してください。 – trincot

+0

array_filterは魅力的に機能します!それを指摘してくれてありがとう。 – Antari24

関連する問題