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

PHP/MySQL:从现有数组重新创建多维数组,php,mysql,arrays,Php,Mysql,Arrays,我有一个多数组(当前有对象),我想根据特定的键/值对其重新排序 Array ( [0] => stdClass Object ( [task_id] => 1 [task_title] => Title [users_username] => John ) [1] => stdClass Object ( [task_id] => 2 [task_title

我有一个多数组(当前有对象),我想根据特定的键/值对其重新排序

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
    )
)
我想对它重新排序,以按用户名获得多个数组,这样我就可以按用户名循环完成任务

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
                )

        )

)

有没有可能将我的数组重新创建为上面那样的数组?

可能还有另一种方法,使用一些内置函数,但有时我宁愿自己做,并且知道它是如何工作的,而不必查阅文档

方法:

$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
     );
}
遍历所有第一个数组,查看
[users\u 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
     );
}

也许还有另一种方法可以做到这一点,有一些内置的功能,但有时我宁愿自己做,并且知道它是如何工作的,而不必查阅文档

方法:

$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
     );
}
遍历所有第一个数组,查看
[users\u 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
     );
}
就像这样(可能不是100%PHP代码):

如果你想点的话;您可以在之后调用order函数。

类似于以下内容(可能不是100%PHP代码):

如果你想点的话;您可以在之后调用order函数。

是的,这是可能的。 您必须在当前数组中循环并创建一个新数组来执行此操作

例如:

$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\u array
包含的新数组与您要求的数组完全相同

然后你就可以把它分类了

ksort($new_array);
是的,这是可能的。 您必须在当前数组中循环并创建一个新数组来执行此操作

例如:

$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\u array
包含的新数组与您要求的数组完全相同

然后你就可以把它分类了

ksort($new_array);

代码的更新版本

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

代码的更新版本

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

谢谢,这很短而且有效。我不知道它这么简单:-)我不知道你是怎么做到的,因为它在PHP中的语法是无效的。谢谢,这很短而且有效。我不知道它这么简单:-)我不知道你是怎么做到的,因为它在PHP中是无效的语法。