我有这种格式的数组...
[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();
}
首先创建一个能够基于输入构建数组的函数:
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 平面中切换轴。这意味着您需要创建一个新数组(至少是暂时的),否则您将丢失转换中的信息。
如果数据来自某个特定的数据存储,则应考虑以不同的方式进行查询,以便以后无需进行复杂的转换。无论如何,我会再次将整个转换包装到它自己的函数中,即使不是在类中。