Witam

Mamy dane 2 przykładowe tablice:
Zakładamy że tablice mogą składać się nie z 4, ale nawet z kilku tysięcy elementów

  1. $dhcp = array
  2. (
  3. '[98]' => array('45', 'date1'),
  4. '[78]' => array('22', 'date2'),
  5. '[45]' => array('77', 'date3'),
  6. '[25]' => array('74', 'date4'),
  7. );
  8.  
  9. //$dbase = array ("[98]"=>"35", "[70]"=>"22", "[45]"=>"77", "[67]"=>"00");
  10. $dbase = array
  11. (
  12. '[98]' => array('35', 'date11'),
  13. '[70]' => array('22', 'date12'),
  14. '[45]' => array('77', 'date13'),
  15. '[67]' => array('00', 'date14'),
  16. );



1. Potrzebowałem znaleźć wszystkie klucze które występują w pierwszej tablicy ale nie występują w drugiej.
pomogła funkcja
  1. array_diff_key($dhcp, $dbase );


wynik:

  1. (
  2. [[78]] => Array
  3. (
  4. [0] => 22
  5. [1] => date2
  6. )
  7.  
  8. [[25]] => Array
  9. (
  10. [0] => 74
  11. [1] => date4
  12. )
  13.  
  14. )


2. Teraz szukam teraz sposobu który zwróci mi elementy
pierwszej tablicy takie, że klucze są identyczne z kluczami z drugiej
ale elementy o indeksie [0] są różne (elementów o indeksie [1] nie porównujemy)

czyli dla:
  1. [[98]] => Array
  2. (
  3. [0] => 45
  4. [1] => date1
  5. )
  6.  
  7. [[98]] => Array
  8. (
  9. [0] => 35
  10. [1] => date11
  11. )


oba klucze [98] - identyczne:
elementy tablicy: [0] => 45 oraz [0] => 35 - różne

czyli pozostawi element z pierwszej tablicy:

  1. (
  2. [[98]] => Array
  3. (
  4. [0] => 45
  5. [1] => date1
  6. )
  7. )

(może rozwiązanie komuś się przyda)

Po poszukiwaniach znalazłem rozwiązanie w postaci funkcji: array_uintersect_assoc,
która wybiera identyczne klucze i dodatkowo pozwala porównywać
wartości tablic przy pomocy innej funkcji (u mnie to funkcja val_compare_func)


  1. function val_compare_func($v1,$v2)
  2. {
  3. if ($v1[0]!==$v2[0])
  4. return 0;
  5.  
  6. return 1;
  7. }
  8.  
  9. print_r( array_uintersect_assoc($dhcp, $dbase, "val_compare_func") );