2017-08-24 25 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