我有这种格式的数组...
[User] => Array
(
[Oct 09] => Array
(
[10] => 1
[8] => 0
[9] => 0
[7] => 0
[6] => 0
)
[Oct 10] => Array
(
[10] => 0
[8] => 1
[9] => 0
[7] => 0
[6] => 0
)
[Oct 11] => Array
(
[10] => 1
[8] => 0
[9] => 1
[7] => 1
[6] => 1
)
)
我想在不使用任何循环的情况下解析数组,以便以
的形式进行转换[User]=>array
(
[0] =>array(
[date] => OCt 09
[user_id] => 10
[attendance] => 1
)
[1] =>array(
[date] => OCt 09
[user_id] => 8
[attendance] => 0
)
)
像这样我不想使用foreach或for循环,因为它需要时间来解析。我想使用内置的数组函数。我试过的是
public function parseAttendance($y){
return array("date", "user_id", "attendane"); // I want to return something like in this format.
}
public function admin_attendance() {
$result = array_map(array($this, 'parseAttendance'), $arr['User']);
print_r($result);
die();
}
答案 0 :(得分:1)
首先创建一个能够根据输入构建数组的函数:
function add_entries(array &$entries, $key, $values) {
$count = 0;
foreach ($values as $user_id => $attendance) {
$count++;
$entries[] = [
"date" => $key,
...
];
}
return $count;
}
然后,如果它执行了输入所需的功能,则测试该功能。如果一切正常,您只需将它与输入数组一起使用:
$input = obtain_input_array_however_you_do_it();
$output = array();
$count = 0;
foreach ($input as $key => $values) {
$count += add_entries($output, $key, $values)
}
当然这只是解决问题的一种方法,但无论如何都希望有用。顺便提一下,你不能只使用array_map
或array_walk
因为你在2d平面上切换轴。这意味着您需要创建一个新数组(至少暂时),否则您将在转换中丢失信息。
如果数据来自某个特定的数据存储,您应该考虑以不同的方式查询它,以便以后不需要进行复杂的转换。在任何情况下,如果不在一个类中,我会将整个转换再次包装到它自己的函数中。