如何动态定义数组中每个键的范围

时间:2015-08-10 09:07:11

标签: php arrays

这是我的阵列:

$var = array('a', 'b');

现在我想为每个键定义一个范围。例如:

为每个数组值设置5个键:

echo $var[0]; // output: a
echo $var[1]; // output: a
echo $var[2]; // output: a
echo $var[3]; // output: a
echo $var[4]; // output: a

echo $var[5]; // output: b
echo $var[6]; // output: b
echo $var[7]; // output: b
echo $var[8]; // output: b
echo $var[9]; // output: b

事实上我想要这样的事情:

$var = array( '0'=>'a', '1'=>'a', '2'=>'a', '3'=>'a', '4'=>'a',
              '5'=>'b', '6'=>'b', '7'=>'b', '8'=>'b', '9'=>'b'  );

但实际上我无法为每个值定义一个键的范围,因为值太多了。应该注意的是,我可以通过if-else语句(没有array来实现它,但在这种情况下,性能会急剧下降。像这样的东西:

if      (0 <= $i <=4) { $var = 'a'; }
elseif  (5 <= $i <=9) { $var = 'b'; }

但正如我所说,这些值过多,我无法手动为每个值定义范围。那么有什么解决方案吗? (动态设置每个值的5个键)

3 个答案:

答案 0 :(得分:4)

$arr = array('a', 'b');
$i = 6; // for e.g.
$var = $arr[floor($i/5)];

// output: b

答案 1 :(得分:1)

这应该适合你:

只需循环遍历数组并array_fill()结果数组中的每个值,例如。

<?php

    $var = array('a', 'b');
    $amount = 5;
    $result = [];

    foreach($var as $k => $v)
        $result = $result + array_fill($k*$amount, $amount, $v);

    print_r($result);

?>

输出:

Array
(
    [0] => a
    [1] => a
    [2] => a
    [3] => a
    [4] => a
    [5] => b
    [6] => b
    [7] => b
    [8] => b
    [9] => b
)

答案 2 :(得分:0)

$var = array( '0'=>'a', '1'=>'b');

$new_array = array();
foreach ($var as $key => $value) {
    for($i = 0 ; $i < 5 ; $i++){
        $new_array[] = $value;
    }
}

echo '<pre>';
print_r($new_array);