我有一个多阵列(目前有对象),我想根据特定的键/值重新排序。
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
)
)
)
是否可以将我的数组重新创建为如上所示的数组?
答案 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;
}
如果您想订购;你可以随后调用订单功能。