php-阵列中的每2个元素总和



我有这种类型的数组:

array(4) {
    [0] =>
    array(4) {
            ["type"] =>
            string(2)
            "up" ["size"] =>
            float(7.4856046065259)
        }
        [1] =>
        array(4) {
            ["type"] =>
            string(4)
            "down" ["size"] =>
            float(-2.6785714285714)
        }
        [2] =>
        array(4) {
            ["type"] =>
            string(2)
            "up" ["size"] =>
            float(3.103119266055)
        }
        [3] =>
        array(4) {
            ["type"] =>
            string(4)
            "down" ["size"] =>
            float(-2.5251284898703)
        }
}

基本上,我需要获得每个UP&向下(每2个值总和(。有没有有效的方法可以在PHP中进行?

我尝试了一个复杂的功能,但不是很方便:

foreach($array as $fa)
        {
            if($fa_count >= 2)
            {
                $fa_count = 0;
                $fa_change = 0;
                $fa_change = $fa_change + $fa["size"];
                $fa_count++;
            }
            else
            {
                $fa_change = $fa_change + $fa["size"];
                $fa_count++;
            }
        }

显然您正在做类似的事情:

$count  = 0;
$fa_change = 0;
array_map (
    function($fa) use (&$count, &$fa_change) {
        $count++;
        $fa_change+= ('up' === $fa['type'] ? 1 : -1) * $fa['size'];
    },
    $array
);

假设array do 的所有元素都具有"类型"one_answers"大小"定义,否则添加了检查:

        if   (is_array($fa)
           && isset($fa['size']) 
           && isset($fa['type']) 
           && in_array($fa['type'], [ 'up', 'down' ])
        ) {
            $fa_change+= ('up' === $fa['type'] ? 1 : -1) * $fa['size'];
        }

或更好的主张:

        assert ('is_array($fa) && isset($fa["size"]) && isset($fa["type"]) && in_array($fa["type"], array( "up", "down" ))", 'array is not correctly formed');
        $fa_change+= ('up' === $fa['type'] ? 1 : -1) * $fa['size'];

但是您您想要的略有不同:

我需要获得每个

之间的区别
$result = [ ];
foreach ($array as $index => $fa) {
    // Check that $fa is an array and it has $fa['size']
    if ($index % 2) {
        // Check that $fa['type'] here is really DOWN
        $result[] = [ 'change' => $change - $fa['size'] ];
        unset($change);
    } else {
        // Check that $fa['type'] here is really UP
        $change = $fa['size'];
    }
}
if (isset($change)) {
    // There was one item left, and it was 'up'.
    $result = [ 'change' => $change ];
}

最后,$result将拥有$array的一半。

相关内容

最新更新