2016-09-23 8 views
1

多次元配列があり、特定のインデックス値を重複して配列レコードを削除したいので、レコードを破棄する前に条件を使用する必要があります。私はそれが私が上記のレコードのような高い「statusid」を持つレコードを削除したい、その後繰り返される場合は、「NUM」に重複をチェックしたい上記アレイではPHPの多次元配列から特定の条件の後に重複レコードを削除する方法

array { 
[0] 
{ ["name"]=> string(12) "A1" ["status"]=> string(16) "Not Available" ["statusid"]=>4 ["num"]=> string(7) "33" } 

[1] 
{ ["name"]=> string(15) "A2" ["status"]=> string(16) "Available" ["statusid"]=>1 ["num"]=> string(7) "39" } 

[2] 
{ ["name"]=> string(21) "A3" ["status"]=> string(16) "Busy" ["statusid"]=>3 ["num"]=> string(7) "55" } 

[3] 
{ ["name"]=> string(12) "A4" ["status"]=> string(16) "Available" ["statusid"]=>1 ["num"]=> string(7) "54" } 

[4] 
{ ["name"]=> string(18) "A5" ["status"]=> string(16) "Busy" ["statusid"]=>3 ["num"]=> string(7) "33" } 
} 

以下のよう

例えば、私の配列です"num"は[0] [num]と[4] [num]で繰り返されていますが、[4] [statusid]が[0] [statusid]より少ないので、行[4]を保持します。

+1

可能な複製(http://stackoverflow.com/questions/1861682/php-multi-dimensional-array-remove:既に設定されたことがある場合は、ちょうどnumを確認した場合だけでチェック - 重複)。 – Virb

+0

これまでに何を試しましたか? –

答えて

1

単純なifを使用してください。それを別のコンテナの中に移す必要があります。 [この]の

$new_array = array(); 
foreach($array as $a) { 
    if(!isset($new_array[$a['num']]) || $a['statusid'] < $new_array[$a['num']]['statusid']) { 
     $new_array[$a['num']] = $a; 
    } 
} 
+0

あなたの助けてくれてありがとう、しかし、私はこれを入れてほしくない。私が望むのは、numの重複をチェックし、見つかった場合は、statusidの値が高い配列を削除することです。私の配列[1]、[2]、[3]、[4]は配列に残っていますが[0]は[4] [num] [statusid]はより高い値を持ち、[4] [statusid]それは配列から削除する必要があります。あなたが今理解して欲しいです。 –

+0

@FQインデックスが混乱している、編集が正しく動作するはずです – Ghost

+0

ありがとうございますが、[0]、[1]、[2]、[3]などのインデックス値を持つ配列を保存する方法などステータスIDは –

0

これは、あなたがそれを使用することができます1つのライナーコードです:

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

0

次の2つのことを行う必要があります:最初のテーブルの行を比較すると、別のexept aに1列をコピーする関数を作成特定の行。

$k=0; 
for($i=0;$i<$K;$i++)//fix one row 
{ 
for($j=i+1;$j<$k;$j++)//compare with others rows 
{ 
if($array[i]["num"] == $array[j]["num"]) 
{ 
if($array[i]["statusid"]< $array[j]["statusid"] 
{ 
$array = copyTable($k,$j,$array); 
$k--;//array length will be decremented by 1 
} 
else 
{ 
$array = copyTable($k,$i,$array); 
$k--;//array length will be decremented by 1 
$i--;//fixed row will be delete, so stay in same position 
} 
} 
} 
} 

function copyTable($tableLength,$indexOfRowToRemove,$previousArray) 
{ 
$newArray = array(); 
for($i=0;$i<$tableLength;$i++) 
{ 
if($i!=$indexOfRowToRemove) 
    { 
    $newArray[$i] = array( 
        'name' => $previousArray[$i]["name"], 
        'status' => $previousArray[$i]["status"], 
        'statusid' =>$previousArray[$i]["statusid"], 
        'num' => $previousArray[$i]["num"], 

      ) 
    } 
} 
return $newArray; 
} 
関連する問題