0

各値のデルタを決定するために必要な2つの多次元配列があります。array_diff関数はキーの違いのみを返すことを知っています。2つの配列に同じキーのセットが含まれていると仮定して、値の各セットのデルタを決定する関数はありますか?

例:

array_1(test1 => Array([key1] => 100, [key2] => 200 ) )

array_2(test1 => Array([key1] => 105, [key2] => 195 ) )

私は次のようなものを期待します:

array_3(test1 => Array([key1] => 5, [key2] => -5 ) ) 

これを行うためのPHPメソッドはありますか、それとも私自身ですか?

4

3 に答える 3

3

ここでの回答は foreach ループの使用を提案していますが、匿名関数を作成する方が簡単だと思います:

<?php
    $count_delta = create_function('$a,$b', 'return $a - $b;');

    $arr1 = array(100, 200);
    $arr2 = array(20, 180);

    $delta = array_map($count_delta, $arr1, $arr2);

    var_dump($delta);

出力は次のようになります。

array
  0 => int 80
  1 => int 20
于 2012-05-23T16:59:15.157 に答える
1
$delta = array();

foreach( $array1 as $k=>$v )
{
  if( array_key_exists( $k, $array2 )
  {
    // preserve the key
    $delta[$k] = $array1[$k] - $array2[$k];

    // or don't
    $delta[] = $array1[$k] - $array2[$k];
  }
}

print_r($delta);
于 2012-05-23T16:50:18.737 に答える
0

そのための組み込み関数はありませんが、これを使用できます。

function delta_array($a, $b) {
    if (sizeof($a) != sizeof($b))
        return false;

    $arr = array();
    for ($i=0; $i < $c = sizeof($a); $i++)
        $arr[] = $b[$i] - $a[$i];

    return $arr;
}

$arr1 = array(100,200);
$arr2 = array(105,195);

$delta = delta_array($arr1, $arr2);

print_r($delta);

上記が返ってきます

Array
(
    [0] => -5
    [1] => 5
)
于 2012-05-23T16:52:37.100 に答える