2012-03-23 6 views
4

から一つの項目を削除し、私は配列を持っていると言う:PHPは、配列

$before = array(1,2,3,3,4,4,4,5) 

にはどうすれば例えば「3」のひとつ発生を削除しますか?

$after = array(1,2,3,4,4,4,5) 

+1

この場合に固有の回答が必要な場合は、一般的な場合とは異なります。 – hjpotter92

答えて

5

はあなたがやろうとしている正確に何に応じて、様々な方法を使用することができます(配列にその数はなりますどこ私は知らない):

  • array_search()を使用してインデックスを検索し、次にunset()を検索します。
  • インデックスがわかっている場合は、array_splice()を使用して何も置き換えないでください。
  • array_filter()にカスタムコールバックを使用します。
+1

たとえば、unset($ before [array_search(3、$ before)]);とします。配列内で最初に3つ出現するものを削除します。 –

0

あなたはあなたがちょうどあなたがシングルトンに減少する値を持つ$ reduceValues配列を移入、

unset $before[2] 
1

汎用ルーチンのようなものを使用することができます削除したい特定の項目の順序を知っている場合。

$before = array(1,2,2,2,3,3,4,4,4,5,5); 

$reduceValues = array(3,5); 
$toReduce = array_fill_keys($reduceValues,TRUE); 
$after = array_filter($before, 
         function($data) use ($reduceValues,&$toReduce) { 
          if (in_array($data,$reduceValues)) { 
           if ($toReduce[$data]) { 
            $toReduce[$data] = FALSE; 
            return TRUE; 
           } 
           return FALSE; 
          } 
          return TRUE; 
         } 
        ); 
var_dump($after); 
+0

@ salathe - 私は、複数の「ターゲット」を1つのエントリに減らすことができるより一般的なバージョンで作業していました。 –

+0

それはあなたの答えです...しかし、あなたは好きです! :-) – salathe

0

質問する方法はいくつかあります。どちらを使用するべきかは、その用途のコンテキストと、望む正確な結果に依存します。私はarray_splice()を好んでいます、それは配列の番号付けを維持しているからです。最も簡単な方法をお望みなら、私はunset()を提案します。二重引用符を排除する方法をお探しの場合は、array_unique()を使用してください。後者の2つの場合、それらの番号を元に戻す必要がある場合は、array_values()を使用します。削除する必要がある値のインデックスがわからない場合は、上記のいずれかをarray_search()と組み合わせて使用​​できます。より高度なフィルタが必要な場合は、array_filter()を使用してください。

<?php 
header('Content-Type: text/plain'); 

$original = array(1,2,3,3,4,4,4,5); 

echo "ORIGINAL:\n"; 
print_r($original); 
echo "\n\n"; 

echo "Using array_splice():\n"; 
$new = $original; 
array_splice($new, 3, 1); 
print_r($new); 
echo "\n\n"; 

echo "Using array_unique() to remove dupes:\n"; 
$new = array_unique($original); 
$new = array_values($new); 
print_r($new); 
echo "\n\n"; 

echo "Using unset:\n"; 
$new = $original; 
unset($new[3]); 
$new = array_values($new); 
print_r($new); 
echo "\n\n"; 

echo "Using array_search & unset:\n"; 
$new = $original; 
unset($new[array_search('3', $new)]); 
$new = array_values($new); 
print_r($new); 
echo "\n\n"; 
?>