解析没有foreach的2维数组或使用内置数组函数

时间:2013-10-09 07:09:53

标签: php multidimensional-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
            )
 )

我想在不使用任何循环的情况下解析数组,以便以

的形式进行转换
[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();
    } 

1 个答案:

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

如果数据来自某个特定的数据存储,您应该考虑以不同的方式查询它,以便以后不需要进行复杂的转换。在任何情况下,如果不在一个类中,我会将整个转换再次包装到它自己的函数中。