2015-12-02 193 views
0

這裏我需要一些關於兩個數組合並的幫助。合併兩個對象數組並獲取唯一對象PHP

這是示例代碼我有

$tasks = array(); 
    $task_user = new Task_User; 
    $task_user->setUserId($this->session_data['userId']); 
    $user_taskIds = $this->getUserTasks($task_user); 
    foreach ($user_taskIds as $row) { 
     $task = new Task; 
     // $task->setBranchId($branch_id); 
     $task->setTaskId($row->getTaskId()); 
     $tasks[] = $this->getTask($task); 
    } 
    echo "<pre>"; 
    print_r($tasks); 
    $pageData['userTasks'] = $tasks; 
    $task = new Task; 
    // $task->setBranchId($branch_id); 
    $task->setCreated($this->session_data['userId']); 
    $tasks1 = $this->getBranchTasks($task); 
    if (!empty($tasks1[0])) 
    { 
     $pageData['userTasks'] = $tasks1; 
    } 
    print_r($tasks1); 
    print_r($pageData['userTasks']); 

$這 - >負載>視圖( '家',$ pageData);

OUTPUT:

Array 
(
    [0] => Task Object 
     (
      [task_id:Task:private] => 22 
      [service_id:Task:private] => 1 
      [branch_id:Task:private] => 1 
      [customer_id:Task:private] => 121 
      [lead_id:Task:private] => 0 
      [name:Task:private] => YTY0000022 
     ) 

    [1] => Task Object 
     (
      [task_id:Task:private] => 24 
      [service_id:Task:private] => 1 
      [branch_id:Task:private] => 1 
      [customer_id:Task:private] => 1046 
      [lead_id:Task:private] => 0 
      [name:Task:private] => YTY0000024 
     ) 

) 
Array 
(
    [0] => Task Object 
     (
      [task_id:Task:private] => 9 
      [service_id:Task:private] => 1 
      [branch_id:Task:private] => 1 
      [customer_id:Task:private] => 599 
      [lead_id:Task:private] => 0 
      [name:Task:private] => YTY0000009 
     ) 

    [1] => Task Object 
     (
      [task_id:Task:private] => 10 
      [service_id:Task:private] => 1 
      [branch_id:Task:private] => 1 
      [customer_id:Task:private] => 313 
      [lead_id:Task:private] => 0 
      [name:Task:private] => YTY0000010 
     ) 

) 
Array 
(
    [0] => Task Object 
     (
      [task_id:Task:private] => 9 
      [service_id:Task:private] => 1 
      [branch_id:Task:private] => 1 
      [customer_id:Task:private] => 599 
      [lead_id:Task:private] => 0 
      [name:Task:private] => YTY0000009 
     ) 

    [1] => Task Object 
     (
      [task_id:Task:private] => 10 
      [service_id:Task:private] => 1 
      [branch_id:Task:private] => 1 
      [customer_id:Task:private] => 313 
      [lead_id:Task:private] => 0 
      [name:Task:private] => YTY0000010 
     ) 

) 

所以,最後我需要的對象的兩個陣列應與唯一對象進行組合,並將其傳遞到一個陣列。我從最近6個小時試過了。但我無法得到它。請幫助我 在此先感謝。

+1

你可以修改任務類?如果這樣安排它告訴你的ID。另一種獲取私有數據的方法是「序列化」任務並將其從字符串中挖掘出來? –

+1

如果它們是相同的對象,那麼[spl_object_hash - 返回給定對象的哈希ID](http://php.net/manual/en/function.spl-object-hash.php)可能有用嗎? –

回答

0

在一些簡短的測試中,它看起來比in_array適用於對象。但是如果沒有揭露它們,它將無法觀察私有變量,這是我留給你的一個練習。

$tasks2 = []; 
foreach($tasks as $t){ 
    if(!in_array($t,$tasks2){ 
     array_push($tasks2,$t); 
    } 
} 
+0

如果您看到代碼,我將$ tasks和$ tasks1推入單個數組中。然後重寫 – Ravi

+0

否您沒有。你完全替換了數組'$ pageData ['userTasks'] = $ tasks1;' –

0

替換該行 ...

if (!empty($tasks1[0])) 
{ 
    $pageData['userTasks'] = $tasks1; 
} 
... 

到 ...

if (!empty($tasks1[0])) 
{ 
    $pageData['userTasks'] = array_replace($pageData['userTasks'], $tasks1); 
} 
... 
+0

如果我使用這個 – Ravi

+0

你告訴我會發生什麼。你試過了嗎? –