1

オブジェクトの多次元配列があります:

  0 => 
    array
      32281 => object ...
      105145 => object ...
      165656 => object ...
      194124 => object ...
      195397 => object ...
      205859 => object ...
  1 => 
    array
      32281 => object ...
      91504 => object ...
      165656 => object ...
      194124 => object ...
      195397 => object ...
      205859 => object ...
  3 => 
    array
      32281 => object ...
      105145 => object ...
      165656 => object ...
      194124 => object ...
      195397 => object ...
      205859 => object ...

そして、この配列から重複した配列を次のように削除したい (この場合、0 と 1 は同じであるため、1 を削除し、0 と 3 だけを持ちます):

      0 => 
        array
          32281 => object ...
          105145 => object ...
          165656 => object ...
          194124 => object ...
          195397 => object ...
          205859 => object ...
      3 => 
        array
          32281 => object ...
          91504 => object ...
          165656 => object ...
          194124 => object ...
          195397 => object ...
          205859 => object ...

array_unique、array_keys、array_keys_exists を使用して多くのことを試みましたが失敗しました...

例えば ​​:

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

また

 $result = array();     
 foreach ($array as $key => $value) { 
    if(!array_key_exists($key,$result))
        $result[$key] = $array[$key]; 
  }
4

4 に答える 4

3

この関数は次のことを行う必要があります。

function my_unique($array) {
  foreach($array as $key => $value) {
    foreach($array as $key2 => $value2) {
      if($key != $key2 && $value === $value2) {
        unset($array[$key]);
      }
    }
  }
  return $array;
}
于 2012-09-28T10:20:51.680 に答える
0

あなたの質問が正しく理解できれば、すべてのキーに基づいてサブ配列の重複を排除したいと考えています。

ベースに自然な 0 ベースの配列キーがあると仮定します。

$keys=array_map("serialize",array_map("array_keys",$arr));
$keys=array_unique($keys);
$result=array();
foreach($keys as $idx=>$not_care)
{
    $result[$idx]=$arr[$idx];
}

だから

$arr=array(array(1234=>"1234",5678=>"5678"),
    array(1357=>"1357",2468=>"2468"),
    array(1234=>"1234",5678=>"5678"),
    array(1357=>"1357",8642=>"8642"));

あなたが得る:

Array
(
    [0] => Array
        (
            [1234] => 1234
            [5678] => 5678
        )

    [1] => Array
        (
            [1357] => 1357
            [2468] => 2468
        )

    [3] => Array
        (
            [1357] => 1357
            [8642] => 8642
        )

)
于 2012-09-28T10:38:13.630 に答える
0

あなたが試すことができます

$array = array(
  0 => 
    array (
      32281 => new stdClass , 
      105145 => new stdClass , 
      165656 => new stdClass , 
      194124 => new stdClass , 
      195397 => new stdClass , 
      205859 => new stdClass ),
  1 => 
    array (
      32281 => new stdClass , 
      91504 => new stdClass , 
      165656 => new stdClass , 
      194124 => new stdClass , 
      195397 => new stdClass , 
      205859 => new stdClass ) ,
  3 => 
    array (
      32281 => new stdClass , 
      105145 => new stdClass , 
      165656 => new stdClass , 
      194124 => new stdClass , 
      195397 => new stdClass , 
      205859 => new stdClass  )
    );


$array2 = array_unique(array_map("serialize", $array));
$final = array_map("unserialize",array_diff($array2, array_diff_assoc(array_map("serialize", $array), $array2)));
var_dump($final);

出力

array
  1 => 
    array
      32281 => 
        object(stdClass)[19]
      91504 => 
        object(stdClass)[20]
      165656 => 
        object(stdClass)[21]
      194124 => 
        object(stdClass)[22]
      195397 => 
        object(stdClass)[23]
      205859 => 
        object(stdClass)[24]
于 2012-09-28T10:34:11.900 に答える
0
    <?php
$arr =  array (0 => 
    array(
      32281 => new stdClass,
      105145 => new stdClass,
      165656 => new stdClass,
      194124 => new stdClass,
      195397 => new stdClass,
      205859 => new stdClass,
    ),
  1 => 
    array(
      32281 => new stdClass,
      91504 => new stdClass,
      165656 => new stdClass,
      194124 => new stdClass,
      195397 => new stdClass,
      205859 => new stdClass,
    ),
  3 => 
    array(
      32281 => new stdClass,
      105145 => new stdClass,
      165656 => new stdClass,
      194124 => new stdClass,
      195397 => new stdClass,
      205859 => new stdClass,
    ),
);

$result = array();
function put($value, $key) {
    global $result;
    $result[$key] = $value;
}
array_walk_recursive($arr, "put");

var_dump($result);

/**
array(7) {
  [32281]=>
  object(stdClass)#13 (0) {
  }
  [105145]=>
  object(stdClass)#14 (0) {
  }
  [165656]=>
  object(stdClass)#15 (0) {
  }
  [194124]=>
  object(stdClass)#16 (0) {
  }
  [195397]=>
  object(stdClass)#17 (0) {
  }
  [205859]=>
  object(stdClass)#18 (0) {
  }
  [91504]=>
  object(stdClass)#8 (0) {
  }
}

 */
于 2012-09-28T10:34:22.993 に答える