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中是无效的语法。