2017-08-24 63 views
0

有沒有辦法從1開始,直到數組結束(在下面的例子中爲10)數組的鍵的總和。 因此,如果所有複選框都被選中,結果應該是55(1 + 2 + 3 ... + 10)。我從1開始分配密鑰,但它不起作用。 這就是我到目前爲止。 這裏是陣列(值不事現在,他們將在以後處理):獲得從1開始的數組的鍵和計數

<?php 
$rank1_1[1] = '<input type = "checkbox" name = "v_1[]" value="1" />h'; 
$rank1_1[2] = '<input type = "checkbox" name = "v_1[]" value="7" />w'; 
$rank1_1[3] = '<input type = "checkbox" name = "v_1[]" value="20" />n'; 
$rank1_1[4] = '<input type = "checkbox" name = "v_1[]" value="44" />m'; 
$rank1_1[5] = '<input type = "checkbox" name = "v_1[]" value="81" />l'; 
$rank1_1[6] = '<input type = "checkbox" name = "v_1[]" value="133" />k'; 
$rank1_1[7] = '<input type = "checkbox" name = "v_1[]" value="203" />p'; 
$rank1_1[8] = '<input type = "checkbox" name = "v_1[]" value="292" />b'; 
$rank1_1[9] = '<input type = "checkbox" name = "v_1[]" value="403" />s'; 
$rank1_1[10] = '<input type = "checkbox" name = "v_1[]" value="537" />b'; 
?> 

的過程:

<?php 
for ($i = 1; $i <= count($rank1_1); $i++) 
echo $rank1_1[$i], '<br />'; 
$keys = array_keys($checked_1); 
foreach($keys as $keys_s) { 
$keys_sum += $keys_s; 
    } 
?> 

而結果:

<?php 
echo '<br />$keys_sum = '. $keys_sum; // $keys_sum = 45 
print_r ($keys_sum); // Array ([0] => 0 [1] => 1 [2] => 2 [3] => 3 
[4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9) 
?> 

而且如果我檢查第8,第9和第10個框,結果是:

Array ([0] => 0 [1] => 1 [2] => 2 [3] 

如何使其按預期工作?請幫忙。

+0

有沒有在你的代碼中有一噸重的。爲什麼不以編程方式生成這些? – tadman

+0

如果有10個複選框,爲什麼不計算呢? – AbraCadaver

+0

如果你的數組有10個元素(count($ arr)= 10),從$ arr [0]開始,那麼最後一個元素是$ arr [9]。您的代碼正在訪問超出數組末尾的$ rank1_1 [count($ rank_1_1))]。你在變量名中使用數字會讓我覺得你還沒有真正理解如何使用數組。使用一個數組中的索引來解析保存在另一個數組中的數據是一種反模式。 – symcbean

回答

0

假設$ rank1_1陣列中的每個鍵值對被認爲是「檢查」,那麼你的回答很簡單:

$rank1_1[1] = '<input type = "checkbox" name = "v_1[]" value="1" />h'; 
$rank1_1[2] = '<input type = "checkbox" name = "v_1[]" value="7" />w'; 
$rank1_1[3] = '<input type = "checkbox" name = "v_1[]" value="20" />n'; 
$rank1_1[4] = '<input type = "checkbox" name = "v_1[]" value="44" />m'; 
$rank1_1[5] = '<input type = "checkbox" name = "v_1[]" value="81" />l'; 
$rank1_1[6] = '<input type = "checkbox" name = "v_1[]" value="133" />k'; 
$rank1_1[7] = '<input type = "checkbox" name = "v_1[]" value="203" />p'; 
$rank1_1[8] = '<input type = "checkbox" name = "v_1[]" value="292" />b'; 
$rank1_1[9] = '<input type = "checkbox" name = "v_1[]" value="403" />s'; 
$rank1_1[10] = '<input type = "checkbox" name = "v_1[]" value="537" />b'; 

echo array_sum(array_keys($rank1_1)); // 55 

echo '<br />'; 
echo '<br />'; 

但是如果你需要確保值被檢查爲$ checked_1 ,那麼我只能假設你的價值觀是1,7,20,44,等

$checked_1 = array(1, 7, 20, 44); 

在這種情況下,你就需要匹配這樣的:

$i = 1; 
foreach($rank1_1 as $key => $value) 
{ 
    foreach($checked_1 as $x) 
    { 
     if(strpos($value, 'value="' . $x . '"') !== FALSE) 
     { 
      $found[] = $i; 
      $i++; 
      break; 
     } 
    } 
} 

if(isset($found)) 
    echo array_sum($found); // 10 

與所有的,如果有的話$ checked_1元素只是添加到您的計數,如果它總是從1開始,那麼你可能只是這樣做:

$total = 0; 
for($x = 1; $x <= count($checked_1); $x++) 
{ 
    $total += $x; 
} 

如果沒有這種幫助你出去,我認爲你需要給我們一個$ checked_1的樣子,以及你的期望是什麼樣子的例子。

UPDATE -----------------

在問候你最近的評論,你的意思是這樣的:

foreach($rank1_1 as $key => $value) 
{ 
    foreach($checked_1 as $x) 
    { 
     if(strpos($value, 'value="' . $x . '"') !== FALSE) 
     { 
      $found[] = $x; 
      break; 
     } 
    } 
} 

if(isset($found)) 
    echo array_sum($found); 

更新2 - ------------------

總和的關鍵:

foreach($rank1_1 as $key => $value) 
{ 
    foreach($checked_1 as $x) 
    { 
     if(strpos($value, 'value="' . $x . '"') !== FALSE) 
     { 
      $found[] = $key; 
      break; 
     } 
    } 
} 

if(isset($found)) 
    echo array_sum($found); 
+0

Brian,非常感謝。對不起,可能我不是很清楚。複選框將由用戶隨機檢查,每個複選框必須根據其編號有自己的權重(有一天它可能會成爲知識測試;)。你所有的例子工作並給出總和,但他們不考慮複選框的重量。 $ checked_1是一個選中複選框的數組。你有一個想法如何做到這一點? – Ken

+0

查看我修改後的答案的最後部分,並讓我知道這是不是你的意思。 –

+0

不,這個人計算值的總和,而不是鍵的總和。我也需要值的總和,但我已經有了它(有點不同)。也許我可以以某種方式停止使用鍵 - 將值分成兩部分,然後用分隔符分解它們。這可以在這裏實施嗎? 讓我試着再次解釋我想要的東西。我有數據(數組?)與相關值的夫婦。數組的一部分(在我上面的例子中 - 鍵)是算術級數,另一部分是對數(在我的例子中是數值)。 我希望能夠以任意組合計算每個進程的總和。有任何想法嗎? – Ken