php - 解析不带foreach或者使用内置 array 函数的2维 array

  显示原文与译文双语对照的内容
0 0

我有 array 这种格式。


[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
 )
 )

我想在不使用任何循环的情况下解析 array,以便它在窗体中转换


[User]=>array
( 
 [0] =>array( 
 [date] => OCt 09
 [user_id] => 10
 [attendance] => 1
 )
 [1] =>array(
 [date] => OCt 09
 [user_id] => 8
 [attendance] => 0
 ) 
)

像这样,我不想使用foreach或者循环,因为它需要时间来解析。 我想使用内置的array 函数。 我尝试的是


 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 0

首先创建一个能够基于输入生成 array的函数:


function add_entries(array &$entries, $key, $values) {
 $count = 0;
 foreach ($values as $user_id => $attendance) {
 $count++;
 $entries[] = [
"date" => $key,
. . .
 ];
 }
 return $count;
}

然后测试该函数,如果它执行输入所需的内容。 如果一切正常,你只需要将它与输入 array 一起使用:


$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,因为你在 2平面上的switch 轴上可以使用或者。 也就是说,你需要创建一个新的array ( 暂时至少) 否则你会在转换中丢失信息。

如果数据来自某些特定的数据存储,你应该考虑在以后不同的情况下查询它。 在任何情况下,我都将整个转换重新包装到一个函数中,如果不在一个类中。

原作者:
...