2016-02-05 2 views
-1

У меня есть 3 объекта, и я хочу, чтобы они объединились в 1 массив. В объектах есть дубликаты имен свойств, но я тоже хочу их (с именем свойства переименования). Как я могу это сделать?Как объединить объекты в массив без удаления дубликатов в PHP

$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; 

Теперь я думал делать Еогеасп, но я застрял , Мой фактический объект слишком велик. Таким образом, существует много дубликатов. Не только этот.

+0

Попытался что-нибудь? – AbraCadaver

+0

@AbraCadaver Да. Пытался назначить один массив и сделать цикл. Но застрял. См. Обновленный вопрос. –

+0

- единственный идентификатор, который дублируется? – Andrew

ответ

-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; 
    } 
} 
0

Я думаю, что вы можете достичь этого, используя ниже код,

$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); 

Выход ($ данных) выше кода будет,

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 
)