2017-07-31 39 views
0

我正在使用PHP。我想爲幾個數組鍵添加相同的值。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

爲什麼不能使用'爲($ I = 1; $ I <= 5; $ i ++)$ array [$ i] = 1000;'? –

+0

@IlyaBursov謝謝,但無論如何,我正在尋找別的東西。 – xms

+0

@IlyaBursov我看到你的回覆,但現在它已被刪除。有一些有趣的事情,但我不記得代碼。 – xms

回答

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; 
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); 

乾杯

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) }

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

這是最簡潔可讀的IMO方法。這是PHP提供這個功能的確切原因 - 所以使用它。在這些小數組上,for循環可能在納秒級上工作得更快,但array_fill()從字面上講述了正在執行的進程。如果這是我的項目,我就會這樣做。 +1 – mickmackusa

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)))));