我正在使用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>";
这根本不起作用。
任何想法如何用更少的代码完成工作?
答案 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)))));