【问题标题】:How to slice the big array and return the sliced array based upon value of the argument page_no?如何根据参数 page_no 的值对大数组进行切片并返回切片数组?
【发布时间】:2015-05-12 21:31:24
【问题描述】:

我有一个名为 $data 的大数组。供您参考,我仅将其中的 14 个元素放在下面。实际上它可能包含数百个这样的元素:

Array
(
    [0] => 16
    [1] => Array
        (
            [0] => Array
                (
                    [user_id] => 199
                    [profile_page_id] => 0
                    [user_server_id] => 0
                    [user_name] => profile-199
                    [full_name] => Benjamin Jordon
                    [gender] => 0
                    [user_image] => 
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [1] => Array
                (
                    [user_id] => 901
                    [profile_page_id] => 0
                    [user_server_id] => 1
                    [user_name] => profile-901
                    [full_name] => Campusknot .
                    [gender] => 0
                    [user_image] => 2014/11/b23e023750785c8b5e61ace4d6a202fa%s.png
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [2] => Array
                (
                    [user_id] => 244
                    [profile_page_id] => 0
                    [user_server_id] => 0
                    [user_name] => profile-244
                    [full_name] => Campusknot .
                    [gender] => 0
                    [user_image] => 2015/02/0f34dbb95ce18b17611220b78c87f9a6%s.png
                    [is_invisible] => 0
                    [user_group_id] => 7
                    [language_id] => 
                )

            [3] => Array
                (
                    [user_id] => 200
                    [profile_page_id] => 0
                    [user_server_id] => 0
                    [user_name] => profile-200
                    [full_name] => Derius Galvez
                    [gender] => 0
                    [user_image] => 
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [4] => Array
                (
                    [user_id] => 109
                    [profile_page_id] => 0
                    [user_server_id] => 0
                    [user_name] => profile-109
                    [full_name] => Hiten patel
                    [gender] => 0
                    [user_image] => 
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [5] => Array
                (
                    [user_id] => 204
                    [profile_page_id] => 0
                    [user_server_id] => 0
                    [user_name] => profile-204
                    [full_name] => Huong Nguyen
                    [gender] => 0
                    [user_image] => 
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [6] => Array
                (
                    [user_id] => 196
                    [profile_page_id] => 0
                    [user_server_id] => 1
                    [user_name] => profile-196
                    [full_name] => Ira Hampton
                    [gender] => 1
                    [user_image] => 2014/11/24c4a6835e667b67b82cea3666841ac7%s.jpg
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [7] => Array
                (
                    [user_id] => 211
                    [profile_page_id] => 0
                    [user_server_id] => 0
                    [user_name] => profile-211
                    [full_name] => Kevin Rolando Vilcapaza Diaz
                    [gender] => 1
                    [user_image] => 
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [8] => Array
                (
                    [user_id] => 202
                    [profile_page_id] => 0
                    [user_server_id] => 1
                    [user_name] => profile-202
                    [full_name] => Mai Le
                    [gender] => 0
                    [user_image] => 2014/08/ebaf98a8b7875b4814b06baceaccad22%s.jpg
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [9] => Array
                (
                    [user_id] => 185
                    [profile_page_id] => 0
                    [user_server_id] => 1
                    [user_name] => profile-185
                    [full_name] => Perceus Mody
                    [gender] => 1
                    [user_image] => 2014/09/5f86df8752fd7079296c0101d235a592%s.jpg
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [10] => Array
                (
                    [user_id] => 205
                    [profile_page_id] => 0
                    [user_server_id] => 1
                    [user_name] => profile-205
                    [full_name] => Phong Phan
                    [gender] => 0
                    [user_image] => 2014/08/d32361f1f72a4e24b9c8329501bc8aa1%s.jpg
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [11] => Array
                (
                    [user_id] => 201
                    [profile_page_id] => 0
                    [user_server_id] => 1
                    [user_name] => profile-201
                    [full_name] => Rahul Gopal
                    [gender] => 1
                    [user_image] => 2014/09/d936e72dbad21732812c33e80752aad6%s.png
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [12] => Array
                (
                    [user_id] => 208
                    [profile_page_id] => 0
                    [user_server_id] => 0
                    [user_name] => profile-208
                    [full_name] => SHUVAM SAHA
                    [gender] => 0
                    [user_image] => 
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

            [13] => Array
                (
                    [user_id] => 212
                    [profile_page_id] => 0
                    [user_server_id] => 0
                    [user_name] => profile-212
                    [full_name] => Turner Corbin
                    [gender] => 0
                    [user_image] => 
                    [is_invisible] => 0
                    [user_group_id] => 6
                    [language_id] => 
                )

        )

)

请忽略上述数组中的第一个键值对,即[0] => 16。考虑 [1] 中存在的包含 14 个元素的数组。

现在我想要的是一个函数,我将向其传递数组$data 和一个参数page_no

假设,如果我通过了page_no=1,那么我应该得到前 10 条记录作为回报,即以下数组:

Array
    (

                [0] => Array
                    (
                        [user_id] => 199
                        [profile_page_id] => 0
                        [user_server_id] => 0
                        [user_name] => profile-199
                        [full_name] => Benjamin Jordon
                        [gender] => 0
                        [user_image] => 
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )

                [1] => Array
                    (
                        [user_id] => 901
                        [profile_page_id] => 0
                        [user_server_id] => 1
                        [user_name] => profile-901
                        [full_name] => Campusknot .
                        [gender] => 0
                        [user_image] => 2014/11/b23e023750785c8b5e61ace4d6a202fa%s.png
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )

                [2] => Array
                    (
                        [user_id] => 244
                        [profile_page_id] => 0
                        [user_server_id] => 0
                        [user_name] => profile-244
                        [full_name] => Campusknot .
                        [gender] => 0
                        [user_image] => 2015/02/0f34dbb95ce18b17611220b78c87f9a6%s.png
                        [is_invisible] => 0
                        [user_group_id] => 7
                        [language_id] => 
                    )

                [3] => Array
                    (
                        [user_id] => 200
                        [profile_page_id] => 0
                        [user_server_id] => 0
                        [user_name] => profile-200
                        [full_name] => Derius Galvez
                        [gender] => 0
                        [user_image] => 
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )

                [4] => Array
                    (
                        [user_id] => 109
                        [profile_page_id] => 0
                        [user_server_id] => 0
                        [user_name] => profile-109
                        [full_name] => Hiten patel
                        [gender] => 0
                        [user_image] => 
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )

                [5] => Array
                    (
                        [user_id] => 204
                        [profile_page_id] => 0
                        [user_server_id] => 0
                        [user_name] => profile-204
                        [full_name] => Huong Nguyen
                        [gender] => 0
                        [user_image] => 
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )

                [6] => Array
                    (
                        [user_id] => 196
                        [profile_page_id] => 0
                        [user_server_id] => 1
                        [user_name] => profile-196
                        [full_name] => Ira Hampton
                        [gender] => 1
                        [user_image] => 2014/11/24c4a6835e667b67b82cea3666841ac7%s.jpg
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )

                [7] => Array
                    (
                        [user_id] => 211
                        [profile_page_id] => 0
                        [user_server_id] => 0
                        [user_name] => profile-211
                        [full_name] => Kevin Rolando Vilcapaza Diaz
                        [gender] => 1
                        [user_image] => 
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )

                [8] => Array
                    (
                        [user_id] => 202
                        [profile_page_id] => 0
                        [user_server_id] => 1
                        [user_name] => profile-202
                        [full_name] => Mai Le
                        [gender] => 0
                        [user_image] => 2014/08/ebaf98a8b7875b4814b06baceaccad22%s.jpg
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )

                [9] => Array
                    (
                        [user_id] => 185
                        [profile_page_id] => 0
                        [user_server_id] => 1
                        [user_name] => profile-185
                        [full_name] => Perceus Mody
                        [gender] => 1
                        [user_image] => 2014/09/5f86df8752fd7079296c0101d235a592%s.jpg
                        [is_invisible] => 0
                        [user_group_id] => 6
                        [language_id] => 
                    )           

    )

然后如果我通过 page_no =2 那么后续的集合或记录,即键 [10],[11],[12],[13] 应该得到回报。数组键不应从[0] 重新开始。换句话说,我希望基于参数 page_no 的值的 10 个或更少元素中的数组元素,原始数组键保持不变。

如果特定页码不存在任何元素,则它应该返回 false。

由于实际数组的大小可能非常庞大,包含数百个这样的元素,我应该如何以有效的方式执行此操作?请帮我。谢谢。

【问题讨论】:

    标签: php arrays multidimensional-array associative-array key-value


    【解决方案1】:

    使用这个:-

    $input = array('', ................);
    
    $pageno = 1
    $numberofrecords = 10;
    
    
    $array_end = $pageno * 10;
    $array_e= $array_end  -  1;
    
    
    
    $numbers =  $numberofrecords - 1;
    $array_start = $array_e - $numbers;
    
    
    print_r(array_slice($input,$array_start,$array_e));
    

    【讨论】:

    • 如果您能给出包含函数调用和函数定义的完整可行代码,那将非常有帮助。
    • 只需将你的数组传入 $input vriable。
    【解决方案2】:

    你可以试试这个:

    function slice($data = array(), $pageNo = null)
    {
        if (is_null($data)) {
            return array();
        } else {
            if ($pageNo == null || $pageNo == 1) {
                $ctr = 0;
                for ($i = 0; $i < 10; $i++) {
                    if (isset($data[$ctr])) {
                        $dataSliced[] = $data[$ctr];
                        $ctr++;
                    }
                }
            } else {
                $ctr = ($pageNo * 10) - 10;
                for ($i = 0; $i < 10; $i++) {
                   if (isset($data[$ctr])) {
                      $dataSliced[] = $data[$ctr];
                      $ctr++;
                   }
                }
            }
            return $dataSliced;
        }
    }
    

    此函数检查为$data 为空并将返回一个空数组,否则它将检查控制将返回的数组的$pageNo,如果$pageNo 为空或1 $ctr 哪个是控制变量,用于知道它将获得的数据的索引,因此它将获得数据的索引 0,否则如果索引为 2,它将获得下 10 条记录的索引,依此类推。希望有帮助。

    或者如果你想要 php 的 array_slice 方法,你可以试试这个:

    function slice($data = array(), $pageNo = null)
    {
        if (is_null($data)) {
            return array();
        } else {
            if ($pageNo) {
                $ctr = ($pageNo * 10) - 10;
                $dataSliced = array_slice($data, $ctr, 10); 
            }
            return $dataSliced;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-13
      • 2012-11-10
      • 2015-04-15
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      相关资源
      最近更新 更多