-2

Assume I have two arrays $array1 :

array (size=3)
  0 =>
    array (size=5)
      'id' => int 16
      'project_id' => string '37' (length=2)
      'description' => string 'Guitar' (length=6)
      'qty' => int 87
      'uom' => string 'Units' (length=5)

  1 =>
    array (size=5)
      'id' => int 17
      'project_id' => string '37' (length=2)
      'description' => string 'Drums' (length=5)
      'qty' => int 889
      'uom' => string 'Drum' (length=4)

  2 =>
    array (size=5)
      'id' => int 13
      'project_id' => string '37' (length=2)
      'description' => string 'Bump' (length=4)
      'qty' => int 76
      'uom' => string 'Units' (length=5)

and $array2 :

array (size=2)
  0 =>
    array (size=3)
      'id' => int 17
      'qty' => int 800
  1 =>
    array (size=3)
      'id' => int 16
      'qty' => int 87

I need some help:

  • merge above arrays by id and do subtraction of qty values
  • check if qty values less than or equal to 0 do not include in $result.

so the final $result would be:

array (size=2)
  0 =>
    array (size=5)
      'id' => int 17
      'project_id' => string '37' (length=2)
      'description' => string 'Drums' (length=5)
      'qty' => int 89
      'uom' => string 'Drum' (length=4)

  1 =>
    array (size=5)
      'id' => int 13
      'project_id' => string '37' (length=2)
      'description' => string 'Bump' (length=4)
      'qty' => int 76
      'uom' => string 'Units' (length=5)

Any help would be appreciated, thanks.

ichadhr
  • 629
  • 6
  • 18

1 Answers1

2

Try this:

foreach($array1 as $a) {
    $match = false;
    foreach($array2 as $b) {
        if ($a['id'] == $b['id']) {
            $match = true;
            if (($a['qty'] - $b['qty']) > 0) {
                $a['qty'] -= $b['qty'];
                $result[] = $a;
                break;
            }
        }
    }
    if(!$match) $result[] = $a; 
}
Berriel
  • 12,659
  • 4
  • 43
  • 67