2015-12-29 5 views
0

Это может быть немного запутанным, но я собираюсь объяснить это как можно лучше. Пожалуйста, несите меня.Сумма значений массива на основе аналогичных значений из другого массива

У меня есть следующие массивы:

Array 
(
    [question1] => 69 
    [question2] => 36 
    [question3] => 57 
    [question4] => 69 
    [question5] => 58 
    [question6] => 40 
    [question7] => 58 
) 

Array 
(
    [question1] => 8 
    [question2] => 6 
    [question3] => 5 
    [question4] => 6 
    [question5] => 7 
    [question6] => 8 
    [question7] => 5 
) 

Как вы можете видеть, что оба массива имеют одинаковые ключи, но разные значения для каждого ключа.

Мне нужно найти ключи во втором массиве с одинаковыми значениями, поэтому [question1] и [question6] оба имеют значение 8. И затем в первом массиве мне нужно добавить значения [question1] и [question6], потому что они имеют одинаковое значение во втором массиве. Мне нужно добавить первые значения массива вместе на основе сопоставления значений во втором массиве (если это имеет смысл)

В идеале, результат будет другой массив, который будет выглядеть примерно так:

Array 
(
    [5] => 115 
    [8] => 109 
    [6] => 105 
    [7] => 58 
) 

Где значение второго массива становится ключом, а сумма добавленных значений из первого массива - это значение.

Теперь я не буду придирчивым, поэтому, если мы не сможем получить его в этом точном формате, тогда все в порядке. Мне просто нужно иметь возможность добавлять значения в первом массиве на основе аналогичных значений во втором массиве.

Надеюсь, это имеет смысл. Если это не прокомментирует, я сделаю все возможное, чтобы объяснить дальше.

+0

Пытались ли вы что-нибудь? Это простая итерация по второму массиву с поиском в первом. – axiac

+0

Я пробовал несколько вещей, таких как цикл через второй массив и цикл через первый массив во втором цикле массивов и поиск похожих ключей, но мне не удалось собрать результаты, они просто заменили друг друга , Можете ли вы показать пример того, как я могу объединить их вместе, а не заменять их, когда он петли? –

ответ

2

Простейшим решением является итерация по второму массиву. Ищите ключ в первый массив, и если он существует, добавьте соответствующее значение из первого массива в массив результатов, индексированный значением из второго массива.

Что-то вроде этого:

$array1 = array(
    'question1' => 69, 
    'question2' => 36, 
    'question3' => 57, 
    'question4' => 69, 
    'question5' => 58, 
    'question6' => 40, 
    'question7' => 58, 
); 
$array2 = array(
    'question1' => 8, 
    'question2' => 6, 
    'question3' => 5, 
    'question4' => 6, 
    'question5' => 7, 
    'question6' => 8, 
    'question7' => 5, 
); 

// Compose the desired result here 
$result = array(); 

// Iterate over the second array; its values become keys in the result array 
foreach ($array2 as $key => $val) { 
    // If this is the first time when this value is reached then a corresponding 
    // value does not yet exists in the result array; add it 
    if (! isset($result[$val])) { 
     $result[$val] = 0; 
    } 

    // Lookup the key into the first array 
    if (isset($array1[$key])) { 
     // If it exists then add its value to the results 
     $result[$val] += $array1[$key]; 
    } 
} 

// That's all 
print_r($result); 
+0

Красивые. Спасибо! –

Смежные вопросы