多维数组在php中调整大小

时间:2011-10-17 12:33:25

标签: php arrays multidimensional-array

我有一个多维数组,我想要的是每个第二级数组值限制应该只设置为4。就像我有一个类型的数组:

Array
(
 [test2] => Array
    (
        [0] => Array
            (
                [application_id] => 405275016
            )
        [1] => Array
            (
                [application_id] => 405275016
            )

        [2] => Array
            (
                [application_id] => 303198288
            )

        [3] => Array
            (
                [application_id] => 303841592
            )

    )

[test3] => Array
    (
        [0] => Array
            (
                [application_id] => 289267216
            )

        [1] => Array
            (
                [application_id] => 303198216
            )

        [2] => Array
            (
                [application_id] => 405275016
            )

        [3] => Array
            (
                [application_id] => 303198288
            )

        [4] => Array
            (
                [application_id] => 303841592
            )

        [5] => Array
            (
                [application_id] => 311430400
            )

        [6] => Array
            (
                [application_id] => 318096216
            )

        [7] => Array
            (
                [application_id] => 320256352
            )
    )

)

以及我想要的内容如果内部数组值超过5计数,则不应该向其添加任何其他值。我必须将上面的数组格式化为:

Array
(
 [test2] => Array
    (
        [0] => Array
            (
                [application_id] => 405275016
            )
        [1] => Array
            (
                [application_id] => 405275016
            )

        [2] => Array
            (
                [application_id] => 303198288
            )

        [3] => Array
            (
                [application_id] => 303841592
            )

    )

[test3] => Array
    (
        [0] => Array
            (
                [application_id] => 289267216
            )

        [1] => Array
            (
                [application_id] => 303198216
            )

        [2] => Array
            (
                [application_id] => 405275016
            )

        [3] => Array
            (
                [application_id] => 303198288
            )

        [4] => Array
            (
                [application_id] => 303841592
            )
    )

)

此处在第二个数组数组中,最后3个数组被截断,以便仅将5个计数作为值。我尝试了很多方法但没有达到这个目的。

关于如何实现这一目标的任何想法都将受到高度赞赏?

4 个答案:

答案 0 :(得分:2)

$array = array_map(function ($arr) { return array_slice($arr, 0, 5); }, $array);

请注意,这使用PHP 5.3+语法。

如果你真的想要一个不能拥有5个以上元素的数组(或类似的东西),你需要实现一个自定义类(可能通过扩展ArrayObject)和/或玩SplFixedArray

答案 1 :(得分:2)

或者您可以像这样使用array_slice函数:

foreach ($array as $key=>$value)
{
    $array[$key] = array_slice($value, 0, 5);
}

答案 2 :(得分:1)

foreach ($array as $k => $v) { // Loop outer array
  for ($i = 5; isset($array[$k][$i]); $i++) { // Loop inner array, starting at element #5
    unset($array[$k][$i]); // unset all elements >=5
  }
}

答案 3 :(得分:1)

PHP没有针对此行为的现成功能,您必须创建自己的函数来为数组添加值以实现此目的。 例如:

function array_add_value($array, $value) {
    if(count($array) < 5) {
        $array[] = $value;
    }
}

如果您希望操作已经包含太多元素的现有数组,则必须为此创建类似的函数 例如:

function fix_array($array) {
    if(count($array) > 5) {
        for($i=4;$i<count($array);$i++) {
            unset($array[$i]);
        }
    }
}