2

私はオブジェクトの配列を持っていますが、それらからいくつかのプロパティによって同様のオブジェクトを削除する必要があります:

例えば:

array(12) {
  [0]=>
  object(stdClass)#848 (5) {
    ["variant"]=>
    object(stdClass)#849 (4) {
      ["name"]=>
      string(8) "Alex"      
    }
    ["age"]=>
    int(10)
  }
  [1]=>
  object(stdClass)#851 (5) {
    ["variant"]=>
    object(stdClass)#852 (4) {
      ["name"]=>
      string(8) "Alex"
    }
    ["age"]=>
    int(10)
  }

このために配列内の1つのオブジェクトを作成する方法(たとえば、名前プロパティのみで比較する必要がある場合)

まだ問題があります。

更新しました

オブジェクトの新しい配列を作成しました。

$objects = array(
    (object)array('name'=>'Stiven','age'=>25,'variant'=>(object)array('surname'=>'Sigal')),
    (object)array('name'=>'Michael','age'=>30,'variant'=>(object)array('surname'=>'Jackson')),
    (object)array('name'=>'Brad','age'=>35,'variant'=>(object)array('surname'=>'Pit')),
    (object)array('name'=>'Jolie','age'=>35,'variant'=>(object)array('surname'=>'Pit')),
);
echo "<pre>";
print_r($objects);

したがって、オブジェクトのプロパティ (バリアント -> 姓と年齢) を比較する必要があります。2 つのオブジェクトの年齢とバリアント -> 姓が似ている場合は、これらのオブジェクトの 1 つを削除する必要があります。

の半分solutionは次のとおりです。

$tmp = array();
foreach ($objects as $item=>$object)
{
    $tmp[$object->variant->surname][$object->age] = $object;
}

print_r($tmp);

残念ながら、古いスタイルのオブジェクト配列が必要です。

4

1 に答える 1

0

例を見つけました。

<?php
 $a = array ( 
    0 => array ( 'value' => 'America', ), 
    1 => array ( 'value' => 'England', ),  
    2 => array ( 'value' => 'Australia', ), 
    3 => array ( 'value' => 'America', ), 
    4 => array ( 'value' => 'England', ), 
    5 => array ( 'value' => 'Canada', ), 
);

$tmp = array ();

foreach ($a as $row) 
    if (!in_array($row,$tmp)) array_push($tmp,$row);

print_r ($tmp);
?>

ここから引用

于 2013-02-26T10:21:39.327 に答える