result1 and result 2 are arrays, with arrays inside. i want to subtract the number of a given aaray, if the name is the same
for example Math 2 – Math 1 = Math 1
i kno i have to use foreach, but not much more
$result1 = ['name' => 'Math', 'number'=> '2'], ['name' => 'Eng', 'number'=> '2']; $result2 = ['name' => 'Math', 'number' => '1'], ['name' => 'Eng', 'number' => '0'];
someone any ideas
Advertisement
Answer
I’ll try to answer basing on assumptions:
- there are only 2 $result variables, not for example 3 or dynamic number of them.
- each of them can have dynamic number of different subjects, in different orders, but if there is a subject in result2 it also has to exist in result1. Of course if results are always the same – only numbers are different it can be easier.
- you want foreach.
- you want to calculate all numbers at once.
$result1 = [['name' => 'Math', 'number'=> '2'], ['name' => 'Eng', 'number'=> '2']]; $result2 = [['name' => 'Math', 'number'=> '1'], ['name' => 'Eng', 'number'=> '0']]; $result3 = $result1; foreach($result1 as $k => $r1) { foreach($result2 as $r2) { if ($r1['name'] === $r2['name']) { $result3[$k]['number'] = (string) ($result3[$k]['number'] - $r2['number']); } } } var_dump($result3);
And the result is:
array(2) { [0]=> array(2) { ["name"]=> string(4) "Math" ["number"]=> string(1) "1" } [1]=> array(2) { ["name"]=> string(3) "Eng" ["number"]=> string(1) "2" } }
So Math is 1 (2-1), and Eng is 2 (2-0).
If “number” was an int it would be a bit simpler but you used string type for it.
Also if $results were keyed by subjects so:
$result1 = ['Math' => 2, 'Eng' => 2];
It would be as trivial as just doing $result1['Math'] - $result2['Math']
so you can consider transforming both $result variables to this format with this code:
$result1 = [['name' => 'Math', 'number'=> '2'], ['name' => 'Eng', 'number'=> '2']]; $result3 = []; foreach ($result1 as $r1) { $result3[$r1['name']] = (int)$r1['number']; } var_dump($result3);
result:
array(2) { ["Math"]=> int(2) ["Eng"]=> int(2) }