如何在不删除 PHP 中的重复项的情况下将对象组合到数组中


How to combine objects to array without removing duplicates in PHP

我有 3 个对象,我希望它们组合成 1 个数组。对象中有重复的属性名称,但我也想要它们(重命名属性名称)。我该怎么做?

$object1 = {
    "id": "10",
    "unit_number": "12565"
},
$object2 = {
    "id": "20",
    "full_name": "Lorem Ipsm"
},
$object3 = {
    "id": "30",
    "phone": "123456789"
}

我想要这样的输出,

array = (
    "id1" => "10",
    "unit_number" => "12565",
    "id2" => "20",
    "full_name" => "Lorem Ipsm",
    "id3" => "30",
    "phone" => "123456789"
);

我试图将它们分配给一个数组,例如,

$arr = array();
$arr['obj1'] = $object1;
$arr['obj2'] = $object2;
$arr['obj3'] = $object3;

现在我想做一个foreach,但我被卡住了。我的实际对象太大了。所以有很多重复项。不只是这个。

我认为

您可以使用以下代码来实现这一点,

$object1 =  (object) ['id' => '10',  "unit_number"=> "12565", "name" => 'Test name'];
$object2 = (object) ['id' => '20',  "full_name"=> "Lorem Ipsm"];
$object3 = (object) ['id' => '30',  "phone"=> "123456789", "name" => "test name 1"];
$array1 = (array) $object1;
$array2 = (array) $object2;
$array3 = (array) $object3;
function array_merge_dup_keys() {
  $arrays = func_get_args();
  $data = array();
  foreach ($arrays as $a) {
    foreach ($a as $k => $v) {
      $key1 = check_key_exists($k,$data);   
      $data[$key1] = $v;
    }
  }
  return $data;
}
function check_key_exists($key,$array,$loop_count=1)
{  
    if(array_key_exists ( $key , $array ))
        {   
            $val = explode('_',$key);
            $count = isset($val[1]) ? $val[1] : $loop_count;
            $start_key = isset($val[0]) ? $val[0] : $key;
            $key = $start_key.'_'.$loop_count; 
            $key = check_key_exists($key,$array,$count+1);
        }
    return $key;
}
$data = array_merge_dup_keys($array1 ,$array2,$array3);

上述代码的输出 ($data) 将是,

Array
(
    [id] => 10
    [unit_number] => 12565
    [name] => Test name
    [id_1] => 20
    [full_name] => Lorem Ipsm
    [id_2] => 30
    [phone] => 123456789
    [name_1] => test name 1
)

也许是这样的东西?(未经测试,可能的拼写错误/语法错误...

// this looks like json, not PHP
// "object1": {
//    "id": "10",
//    "unit_number": "12565"
// },
// "object2": {
//    "id": "20",
//    "full_name": "Lorem Ipsm"
// },
// "object3": {
//    "id": "30",
//    "phone": "123456789"
//  }
// here is a php array for that data
$objArray = array(
  "object1" => array( "id"=>"10", "unit_number"=>"12565"),
  "object2" => array( "id"=>"20", "full_name"=>"Lorem Ipsm"),
  "object3" => array( "id"=>"30", "phone"=>"123456789")
);
$newArray = array();
foreach( $objArray as $key=>$value)
{
  // the the id "append"
  $idAppend = substr($key, strlen("object"));
  foreach($value as $subkey=>$subvalue)
  {
    $newkey = $subkey;
    if ( strcmp($subkey, "id") == 0 ) // it is the id string
    {
      $newkey = $subkey.$idAppend;
    }
    $newArray[$newkey] = $subvalue;
  }
}
相关文章: