PHP / MySQL:从现有数组重新创建多维数组

时间:2012-01-07 19:59:50

标签: php mysql arrays

我有一个多阵列(目前有对象),我想根据特定的键/值重新排序。

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
                )

        )

)

是否可以将我的数组重新创建为如上所示的数组?

4 个答案:

答案 0 :(得分: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
     );
}

答案 1 :(得分: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);

答案 2 :(得分: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);

答案 3 :(得分:0)

就像这样(可能不是100%的PHP代码):

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

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

如果您想订购;你可以随后调用订单功能。