在PHP Array中查找值并进行计算

时间:2014-04-22 19:24:38

标签: php arrays

我正在尝试创建一个函数,我从数组中的特定位置获取数据,然后将结果添加(加)。像这样:

$specificPositionsInArray = "1,4,12,27,40,42,48,49,52,53,56,58";    
$dataArray = "1,2,3,4,5,6,7,8";  // More than hundred values.

myfunction($specificPositionsInArray) {    
    // Find position in array, based on $specificPositionsInArray and then
    // plus the value with the previous value
    // that is found in the $specificPositionsInArray.

    // Something like:     
    $value = $value + $newValue;

    return $value;
}

如果$specificPositionsInArray1,3,5

,那么

应返回的$value为:9(1 + 3 + 5)(基于$dataArray)。

也许有另一种方法可以做到,比如没有这个功能。

4 个答案:

答案 0 :(得分:3)

这是一种功能性方法:

$specificPositionsInArray = array(1,3,7,6);    
$dataArray = array(1,2,3,4,5,6,7,8);

function totalFromArrays($specificPositionsInArray, $dataArray) {    
    foreach ($specificPositionsInArray as $s){
        $total += $dataArray[$s];
    }

    return $total;
}


$total = totalFromArrays($specificPositionsInArray, $dataArray);
echo $total;

答案 1 :(得分:0)

您应该查看数组以及如何处理它们,您可以很容易地找到解决方案。 http://www.php.net/manual/en/book.array.php

//$specificPositionsInArray = array(1,4,12,27,40,42,48,49,52,53,56,58);
$specificPositionsInArray = array(1,3,5);
$dataArray = array(1,2,3,4,5,6,7,8);

$total=0;
foreach($specificPositionsInArray as $k => $v){
    $total += $dataArray[$v-1];
}
echo $total;

关于这个的奇怪部分是$v-1但是由于你想要处理项目的添加方式,并且数组以元素0开始,你必须减去1才能得到正确的值。 / p>

答案 2 :(得分:0)

所以你想做这样的事情:

$dataArray = array(1,2,3,4,5...);  // 100+ values, not necessarily all integers or in ascending order

$specificPositions = array(1, 3, 5);

function addSpecificPositions($data, $positions) {
    $sum = 0;
    foreach($positions as $p)
        $sum += $data[$p];
    return $sum;
}

如果你真的想把你的值列表保存在一个字符串中(就像你在你的例子中那样),你必须首先explode以数组形式获取它们。

答案 3 :(得分:0)

由于您的数组看起来像是使用键的数值,因此这应该相当容易计算。我重新编写了一些代码,以便于阅读:

$specificPositionsInArray = array(1,4,6,7);

默认情况下,PHP会为数组中的每个值分配数字键,因此它对解释器来说就像这样。

array(
    [0] => 1,
    [1] => 4,
    [2] => 6,
    [3] => 7
)

除非您指定数字或混合键,否则对于所有数组都是相同的。由于数据数组似乎只是值,并且没有指定键,因此您只需使用与它们关联的键来定位它们。假设我使用你的数组示例:

$dataArray = array(1,2,3,4,5,6,7,8);

这对解析器来说是这样的:

array(
    [0] => 1,
    [1] => 2,
    [2] => 3,
    [3] => 4,
    [4] => 5,
    [5] => 6,
    [6] => 7,
    [7] => 8
)

如果要从此数组中选择数字6,实际上需要使用$dataArray[5],因为数组键从零开始。所以对于你的功能,你会这样做:

$specificPositionsInArray = array(1,4,6,7);
$dataArray = array(1,2,3,4,5,6,7,8);

calculate_array($specificPositionsInArray, $dataArray); // Returns 18

function calculate_array($keys, $data){
    $final_value = 0; // Set final value to 0 to start

    // Loop through values
    foreach($keys as $key){
        // Add the keys to our starting value
        $final_value += $data[$key-1]; // minus 1 from key so that key position is human readable
    }

    // return the sum of the values
    return $final_value;
}