Изменение размеров многомерного массива в php - PullRequest
0 голосов
/ 17 октября 2011

У меня есть многомерный массив, и я хочу, чтобы в каждой второй степени значения массива ограничивались только 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 ]

2 голосов
/ 17 октября 2011
$array = array_map(function ($arr) { return array_slice($arr, 0, 5); }, $array);

Обратите внимание, что здесь используется синтаксис PHP 5.3+.

Если вы действительно хотите массив (или что-то в этом роде), который не может содержать более 5 элементов, вам необходимо реализовать собственный класс (возможно, путем расширения ArrayObject ) и / или поиграйтесь с SplFixedArray .

2 голосов
/ 17 октября 2011

или вы можете использовать функцию array_slice следующим образом:

foreach ($array as $key=>$value)
{
    $array[$key] = array_slice($value, 0, 5);
}
1 голос
/ 17 октября 2011

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]);
        }
    }
}
1 голос
/ 17 октября 2011
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
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...