2011-10-17 124 views
0

调整大小我有一个多维数组和我想是在每个第二程度的数组值极限应设置为仅4。像我有类型的数组:多维阵列在PHP

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计数作为值。我尝试了很多方法,但都没有实现。

我如何能做到这一点任何想法,将不胜感激?

回答

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 
    } 
} 
2
$array = array_map(function ($arr) { return array_slice($arr, 0, 5); }, $array); 

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

如果你需要的是一个数组(或类似的东西),其不能持有超过5元,你将需要实现自定义类(可能通过扩展ArrayObject)和/或玩弄SplFixedArray

2

,或者您可以使用array_slice函数是这样的:

foreach ($array as $key=>$value) 
{ 
    $array[$key] = array_slice($value, 0, 5); 
} 
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]); 
     } 
    } 
}