2012-01-07 214 views
0

我有一個多數組(目前有對象),我想基於特定的鍵/值重新排序。PHP/MySQL:從現有數組重新創建多維數組

Array 
(
[0] => stdClass Object 
    (
     [task_id] => 1 
     [task_title] => Title 
     [users_username] => John 
    ) 
[1] => stdClass Object 
    (
     [task_id] => 2 
     [task_title] => Title 
     [users_username] => John 
    ) 
[2] => stdClass Object 
    (
     [task_id] => 3 
     [task_title] => Title 
     [users_username] => Mike 
    ) 
) 

我想重新排列它以通過user_name獲取多數組,所以我可以通過用戶名循環執行任務。

Array 
(
    [John] => Array 
     (
      [0] => Array 
       (
        [task_id] => 1 
        [title] => Title 
       ) 

      [1] => Array 
       (
        [task_id] => 2 
        [title] => Title 
       ) 

     ) 

    [Mike] => Array 
     (
      [0] => Array 
       (
        [task_id] => 3 
        [title] => Title 
       ) 

     ) 

) 

是否有可能我的陣列重建像上面的陣列?

回答

1

更新的代碼版本

<?php 
$it0 = (object) array('task_id' => 1,'task_title' => 'Title','users_username' => 'John'); 
$it1 = (object) array('task_id' => 2,'task_title' => 'Title','users_username' => 'John'); 
$it2 = (object) array('task_id' => 3,'task_title' => 'Title','users_username' => 'Mike'); 

$array = array($it0,$it1,$it2); 

$return = array(); 
foreach($array as $id => $value){ 
    $return[$value->users_username][] = array('task_id' => $value->task_id,'title' => $value->task_title); 
} 

var_dump($return); 
+1

謝謝,這很短,工作。不知道這是如此簡單:-) – suntrop 2012-01-08 12:25:09

+0

不確定你是如何得到這個工作的,因爲它在PHP中是無效的語法。 – 2012-01-09 03:34:08

1

可能還有其他方法可以做到這一點,但有時候我寧願自己做,也知道它是如何工作的,而不必查閱文檔。

的方法:

迭代通過所有的第一陣列,看着[users_username]並把它們放入一個新的數組。

代碼:

$dst_array = array(); 
foreach ($src_array as $val) 
{ 
    $user = $val->users_username; 

    // TODO: This check may be unnecessary. Have to test to find out. 
    // If this username doesn't already have an array in the destination... 
    if (!array_key_exists($user, $dst_array)) 
     $dst_array[$user] = array(); // Create a new array for that username 

    // Now add a new task_id and title entry in that username's array 
    $dst_array[$user][] = array(
     'task_id' => $val->task_id 
     'title' => $val->title 
    ); 
} 
0

只是這樣的事情(也許不是100%的PHP代碼):

foreach ($obj : $oldArray) { 
    $newTask['task_id'] = $obj->task_id; 
    $newTask['title'] = $obj->title; 

    $newArray[$oldName][] = $newTask; 
} 

如果您想訂購;之後您可以調用訂單功能。

1

是的,這是可能的。 你必須遍歷你當前的數組並創建一個新的數組來完成它。

例如:

$new_array = array(); 
foreach ($array as $row) 
{ 
    $new_row = array(
     'task_id' => $row->task_id, 
     'title' => $row->task_title, 
    ); 
    $name = $row->users_username; 

    if (isset($new_array[$name])) 
    { 
     $new_array[$name][] = $new_row; 
    } 
    else 
    { 
     $new_array[$name] = array($new_row); 
    } 
} 

現在$new_array包含新的陣列完全像你問的一個。

然後你就可以用

ksort($new_array); 
+0

感謝ksort東西排序呢! – suntrop 2012-01-08 12:26:02