0

我有这种格式的数组...

[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();
    } 
4

1 回答 1

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 平面中切换轴。这意味着您需要创建一个新数组(至少暂时),否则您将丢失转换中的信息。

如果数据来自某个特定的数据存储,您应该考虑以不同的方式查询它,这样您以后就不需要进行复杂的转换。无论如何,即使不在类中,我也会将整个转换再次包装成它自己的函数。

于 2013-10-09T08:37:09.100 回答