PHP并将相同的值添加到多个数组键

时间:2017-07-31 22:37:23

标签: php arrays

我正在使用PHP。我想为几个数组键添加相同的值。

这有效:

$array = array();

$value = 1000;

$from = 1;
$to = 5;

for ($i = $from; $i <= $to; $i++)
{
  $array[$i] = $value;
}

$value = 2000;

$from = 10;
$to = 14;

for ($i = $from; $i <= $to; $i++)
{
  $array[$i] = $value;
}

print "<pre>";
print_r($array);
print "</pre>";

无论如何,我正在寻找一种更短的方式。所以,我试过这个:

$array = array();
$array[range(1, 5)] = 1000;
$array[range(10, 14)] = 2000;

print "<pre>";
print_r($array);
print "</pre>";

这根本不起作用。

任何想法如何用更少的代码完成工作?

5 个答案:

答案 0 :(得分:2)

你走了:

$a = array_fill(1, 5, 1000);
$b = array_fill(10, 5, 2000);
$array = $a + $b;

如果您想要$from$to变量,可以使用以下代码:

$a = array_fill($from_1, $to_1 - $from_1 + 1, 1000);
$b = array_fill($from_2, $to_2 - $from_2 + 1, 2000);
$array = $a + $b;

答案 1 :(得分:1)

这可能会有所帮助

array_fill_keys(array(1, 2, 3, 4, 5), 10000);
array_fill_keys(array(10, 11, 12, 13, 14), 20000);

其他方式是

array_fill_keys(array_values(range(1,5)), 10000);
array_fill_keys(array_values(range(10,14)), 20000);

干杯

答案 2 :(得分:1)

实际上没有比使用for循环更好的方法(有一些较短的解决方案,但它们的可读性和/或性能要差得多)。如果你这么做的话为什么不把它变成一个函数:

function array_set(&$array, $start, $end, $value) {
    for ($i = $start; $i <= $end; $i++) {
        $array[$i] = $value;
    }
}

然后使用它:

$test = array();

array_set($test, 3, 5, 1000);

var_dump($test);

产生:array(3) { [3]=> int(1000) [4]=> int(1000) [5]=> int(1000) }

答案 3 :(得分:0)

明显且最易读的变体是:

$array = array();
for ($i=1; $i<=5;$i++) $array[$i] = 1000;
for ($i=10; $i<=14;$i++) $array[$i] = 2000;

另一种选择是:

$array = array();
$array = array_fill_keys(range(1,5), 1000) + $array;
$array = array_fill_keys(range(10,14), 2000) + $array;

答案 4 :(得分:0)

内置函数array_map将函数应用于数组中的每个元素。该函数可以简单地返回所需的值。

array_map(function () use ($value){return $value;}, array_flip(range(1,5)));

完整(丑陋,不可读,不推荐)的单行解决方案可能是:

print_r(array_filter(array_map(function ($v){return $v < 5 ? 10000 : ($v > 8 ? 20000 : false);}, array_flip(range(1,14)))));