Php 函数来平衡多个数组

Php 函数来平衡多个数组,php,arrays,Php,Arrays,假设我有一个函数 evenOut($array, $limit){ //returns exactly $limit items } 这个数据呢 $animals = array(); $animals['barn'] = array_fill(0,20, 'b'); $animals['forest'] = array_fill(0,20, 'f'); $animals['house'] = array_fill(0,20, 'h'); $animals['mountain'] =

假设我有一个函数

evenOut($array, $limit){
    //returns exactly $limit items
}
这个数据呢

$animals = array();
$animals['barn'] = array_fill(0,20, 'b');
$animals['forest'] = array_fill(0,20, 'f');
$animals['house'] = array_fill(0,20, 'h');
$animals['mountain'] = array_fill(0,20, 'm');
$animals = array();
$animals['barn'] = array_fill(0,1, 'b');
$animals['forest'] = array_fill(0,3, 'f');
$animals['house'] = array_fill(0,8, 'h');
$animals['mountain'] = array_fill(0,1, 'm');
我想返回最多10只动物,但是它们应该在它们来自的地方均匀分布。 所以如果我做了
evenOut(动物,8美元)我会得到两个
('b','b','f','f','h','h','m','m',)

evenOut($animals,2)
应返回
('b','f')

如果我有这些数据

$animals = array();
$animals['barn'] = array_fill(0,20, 'b');
$animals['forest'] = array_fill(0,20, 'f');
$animals['house'] = array_fill(0,20, 'h');
$animals['mountain'] = array_fill(0,20, 'm');
$animals = array();
$animals['barn'] = array_fill(0,1, 'b');
$animals['forest'] = array_fill(0,3, 'f');
$animals['house'] = array_fill(0,8, 'h');
$animals['mountain'] = array_fill(0,1, 'm');
evenOut(动物,8美元)预期结果将是
('b','f','f','f','h','h','h','m',)

evenOut(动物,10美元)预期结果将是
('b','f','f','f','h','h','h','h','h','m',)

evenOut(动物,10美元)预期结果将是
('f','f','f')

我不确定该如何处理这个问题,我希望有一个简单的方法

我自己的解决方案

<?php
function eventOut($animals, $limit)
{
    $j = 0;
    $returnAnimals = array();
    for($i=0; $j<$limit; ++$i) {
        foreach ($animals as $animal) {
            if (isset($animal[$i] && $j<$limit) {
                array_push($returnAnimals, $animal[$i]);
                ++$j;
            } else { 
                $extra++;
            }
         }
     }
     return $returnAnimals;
 }
    function evenOut($array, $limit){
        $indexes = count($array)-1;
        $leveled = array();
        $count=0;
        for($c= 0; $c < $limit; $c++){
            for($i = 0; $i <= $indexes; $i++){
                if(isset($array[$i][$c])){
                    if(!isset($leveled[$i]))
                        $leveled[$i] = array();
                    $leveled[$i][]= $array[$i][$c];
                    $count++;

                }
                if($count == $limit)
                    break 2;
            }
        }
        $merged = array();
        foreach($leveled as $array)
            $merged = array_merge($merged, $array);
        return $merged;
    }
函数均衡($array,$limit){
$index=count($array)-1;
$leveled=array();
$count=0;
对于($c=0;$c<$limit;$c++){

对于($i=0;$i),第一个答案有3个问题,未定义的$extra和,混合动物,如果动物小于限制,则无限执行。第二个答案也没有预期的效果,但感谢您的努力!