007.phpt 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. --TEST--
  2. Test array_diff and array_diff_assoc behaviour
  3. --FILE--
  4. <?php
  5. $a = array(1,"big"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3);
  6. $b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3);
  7. $c = array(-1,1);
  8. echo '$a='.var_export($a,TRUE).";\n";
  9. echo '$b='.var_export($b,TRUE).";\n";
  10. echo '$c='.var_export($c,TRUE).";\n";
  11. var_dump(array_diff($a,$b,$c));
  12. var_dump(array_diff_assoc($a,$b,$c));
  13. $a = array(
  14. 'a'=>2,
  15. 'b'=>'some',
  16. 'c'=>'done',
  17. 'z'=>'foo',
  18. 'f'=>5,
  19. 'fan'=>'fen',
  20. 7=>18,
  21. 9=>25,
  22. 11=>42,
  23. 12=>42,
  24. 45=>42,
  25. 73=>'foo',
  26. 95=>'some',
  27. 'som3'=>'some',
  28. 'want'=>'wanna');
  29. $b = array(
  30. 'a'=>7,
  31. 7=>18,
  32. 9=>13,
  33. 11=>42,
  34. 45=>46,
  35. 'som3'=>'some',
  36. 'foo'=>'some',
  37. 'goo'=>'foo',
  38. 'f'=>5,
  39. 'z'=>'equal'
  40. );
  41. $c = array(
  42. 73=>'foo',
  43. 95=>'some');
  44. echo '$a='.var_export($a,TRUE).";\n";
  45. echo '$b='.var_export($b,TRUE).";\n";
  46. echo '$c='.var_export($c,TRUE).";\n";
  47. echo "Results:\n\n";
  48. var_dump(array_diff($a,$b,$c));
  49. var_dump(array_diff_assoc($a,$b,$c));
  50. echo "-=-=-=-=-=-=-=-=- New functionality from 5.0.0 -=-=-=-=-=-=-=-\n";
  51. error_reporting(E_ALL);
  52. class cr {
  53. private $priv_member;
  54. public $public_member;
  55. function __construct($val) {
  56. $this->priv_member = $val;
  57. $this->public_member = $val;
  58. }
  59. static function comp_func_cr($a, $b) {
  60. if ($a->priv_member === $b->priv_member) return 0;
  61. return ($a->priv_member > $b->priv_member)? 1:-1;
  62. }
  63. }
  64. function comp_func($a, $b) {
  65. if ($a === $b) return 0;
  66. return ($a > $b)? 1:-1;
  67. }
  68. function comp_func_cr($a, $b) {
  69. if ($a->public_member === $b->public_member) return 0;
  70. return ($a->public_member > $b->public_member)? 1:-1;
  71. }
  72. /*
  73. $a = array(1,"big"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3);
  74. $b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3);
  75. $c = array(-1,1);
  76. echo '$a='.var_export($a,TRUE).";\n";
  77. echo '$b='.var_export($b,TRUE).";\n";
  78. echo '$c='.var_export($c,TRUE).";\n";
  79. var_dump(array_diff($a,$b,$c));
  80. var_dump(array_diff_assoc($a,$b,$c));
  81. var_dump(array_udiff($a, $b, $c, "comp_func"));
  82. var_dump(array_diff_uassoc($a,$b,$c, "comp_func"));
  83. */
  84. /*
  85. $a = array(new cr(9),new cr(12),new cr(23),new cr(4),new cr(-15),);
  86. $b = array(new cr(9),new cr(22),new cr( 3),new cr(4),new cr(-15),);
  87. var_dump(array_udiff($a, $b, "comp_func_cr"));
  88. */
  89. $a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
  90. $b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr( 3), 1=> new cr(4), 2 => new cr(-15),);
  91. echo '$a='.var_export($a,TRUE).";\n";
  92. echo '$b='.var_export($b,TRUE).";\n";
  93. echo 'var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));'."\n";
  94. var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));
  95. echo '$a='.var_export($a,TRUE).";\n";
  96. echo '$b='.var_export($b,TRUE).";\n";
  97. echo 'var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));'."\n";
  98. var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));
  99. echo '$a='.var_export($a,TRUE).";\n";
  100. echo '$b='.var_export($b,TRUE).";\n";
  101. echo 'var_dump(array_udiff($a, $b, "comp_func_cr"));'."\n";
  102. var_dump(array_udiff($a, $b, "comp_func_cr"));
  103. echo '$a='.var_export($a,TRUE).";\n";
  104. echo '$b='.var_export($b,TRUE).";\n";
  105. echo 'var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));'."\n";
  106. var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));
  107. ?>
  108. --EXPECTF--
  109. $a=array (
  110. 0 => 1,
  111. 'big' => 2,
  112. 1 => 3,
  113. 2 => 6,
  114. 3 => 3,
  115. 4 => 5,
  116. 5 => 3,
  117. 6 => 3,
  118. 7 => 3,
  119. 8 => 3,
  120. 9 => 3,
  121. 10 => 3,
  122. 11 => 3,
  123. 12 => 3,
  124. 13 => 3,
  125. 14 => 3,
  126. );
  127. $b=array (
  128. 0 => 2,
  129. 1 => 2,
  130. 2 => 3,
  131. 3 => 3,
  132. 4 => 3,
  133. 5 => 3,
  134. 6 => 3,
  135. 7 => 3,
  136. 8 => 3,
  137. 9 => 3,
  138. 10 => 3,
  139. 11 => 3,
  140. 12 => 3,
  141. 13 => 3,
  142. 14 => 3,
  143. );
  144. $c=array (
  145. 0 => -1,
  146. 1 => 1,
  147. );
  148. array(2) {
  149. [2]=>
  150. int(6)
  151. [4]=>
  152. int(5)
  153. }
  154. array(5) {
  155. [0]=>
  156. int(1)
  157. ["big"]=>
  158. int(2)
  159. [1]=>
  160. int(3)
  161. [2]=>
  162. int(6)
  163. [4]=>
  164. int(5)
  165. }
  166. $a=array (
  167. 'a' => 2,
  168. 'b' => 'some',
  169. 'c' => 'done',
  170. 'z' => 'foo',
  171. 'f' => 5,
  172. 'fan' => 'fen',
  173. 7 => 18,
  174. 9 => 25,
  175. 11 => 42,
  176. 12 => 42,
  177. 45 => 42,
  178. 73 => 'foo',
  179. 95 => 'some',
  180. 'som3' => 'some',
  181. 'want' => 'wanna',
  182. );
  183. $b=array (
  184. 'a' => 7,
  185. 7 => 18,
  186. 9 => 13,
  187. 11 => 42,
  188. 45 => 46,
  189. 'som3' => 'some',
  190. 'foo' => 'some',
  191. 'goo' => 'foo',
  192. 'f' => 5,
  193. 'z' => 'equal',
  194. );
  195. $c=array (
  196. 73 => 'foo',
  197. 95 => 'some',
  198. );
  199. Results:
  200. array(5) {
  201. ["a"]=>
  202. int(2)
  203. ["c"]=>
  204. string(4) "done"
  205. ["fan"]=>
  206. string(3) "fen"
  207. [9]=>
  208. int(25)
  209. ["want"]=>
  210. string(5) "wanna"
  211. }
  212. array(9) {
  213. ["a"]=>
  214. int(2)
  215. ["b"]=>
  216. string(4) "some"
  217. ["c"]=>
  218. string(4) "done"
  219. ["z"]=>
  220. string(3) "foo"
  221. ["fan"]=>
  222. string(3) "fen"
  223. [9]=>
  224. int(25)
  225. [12]=>
  226. int(42)
  227. [45]=>
  228. int(42)
  229. ["want"]=>
  230. string(5) "wanna"
  231. }
  232. -=-=-=-=-=-=-=-=- New functionality from 5.0.0 -=-=-=-=-=-=-=-
  233. $a=array (
  234. '0.1' =>
  235. cr::__set_state(array(
  236. 'priv_member' => 9,
  237. 'public_member' => 9,
  238. )),
  239. '0.5' =>
  240. cr::__set_state(array(
  241. 'priv_member' => 12,
  242. 'public_member' => 12,
  243. )),
  244. 0 =>
  245. cr::__set_state(array(
  246. 'priv_member' => 23,
  247. 'public_member' => 23,
  248. )),
  249. 1 =>
  250. cr::__set_state(array(
  251. 'priv_member' => 4,
  252. 'public_member' => 4,
  253. )),
  254. 2 =>
  255. cr::__set_state(array(
  256. 'priv_member' => -15,
  257. 'public_member' => -15,
  258. )),
  259. );
  260. $b=array (
  261. '0.2' =>
  262. cr::__set_state(array(
  263. 'priv_member' => 9,
  264. 'public_member' => 9,
  265. )),
  266. '0.5' =>
  267. cr::__set_state(array(
  268. 'priv_member' => 22,
  269. 'public_member' => 22,
  270. )),
  271. 0 =>
  272. cr::__set_state(array(
  273. 'priv_member' => 3,
  274. 'public_member' => 3,
  275. )),
  276. 1 =>
  277. cr::__set_state(array(
  278. 'priv_member' => 4,
  279. 'public_member' => 4,
  280. )),
  281. 2 =>
  282. cr::__set_state(array(
  283. 'priv_member' => -15,
  284. 'public_member' => -15,
  285. )),
  286. );
  287. var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));
  288. array(3) {
  289. ["0.1"]=>
  290. object(cr)#%d (2) {
  291. ["priv_member":"cr":private]=>
  292. int(9)
  293. ["public_member"]=>
  294. int(9)
  295. }
  296. ["0.5"]=>
  297. object(cr)#%d (2) {
  298. ["priv_member":"cr":private]=>
  299. int(12)
  300. ["public_member"]=>
  301. int(12)
  302. }
  303. [0]=>
  304. object(cr)#%d (2) {
  305. ["priv_member":"cr":private]=>
  306. int(23)
  307. ["public_member"]=>
  308. int(23)
  309. }
  310. }
  311. $a=array (
  312. '0.1' =>
  313. cr::__set_state(array(
  314. 'priv_member' => 9,
  315. 'public_member' => 9,
  316. )),
  317. '0.5' =>
  318. cr::__set_state(array(
  319. 'priv_member' => 12,
  320. 'public_member' => 12,
  321. )),
  322. 0 =>
  323. cr::__set_state(array(
  324. 'priv_member' => 23,
  325. 'public_member' => 23,
  326. )),
  327. 1 =>
  328. cr::__set_state(array(
  329. 'priv_member' => 4,
  330. 'public_member' => 4,
  331. )),
  332. 2 =>
  333. cr::__set_state(array(
  334. 'priv_member' => -15,
  335. 'public_member' => -15,
  336. )),
  337. );
  338. $b=array (
  339. '0.2' =>
  340. cr::__set_state(array(
  341. 'priv_member' => 9,
  342. 'public_member' => 9,
  343. )),
  344. '0.5' =>
  345. cr::__set_state(array(
  346. 'priv_member' => 22,
  347. 'public_member' => 22,
  348. )),
  349. 0 =>
  350. cr::__set_state(array(
  351. 'priv_member' => 3,
  352. 'public_member' => 3,
  353. )),
  354. 1 =>
  355. cr::__set_state(array(
  356. 'priv_member' => 4,
  357. 'public_member' => 4,
  358. )),
  359. 2 =>
  360. cr::__set_state(array(
  361. 'priv_member' => -15,
  362. 'public_member' => -15,
  363. )),
  364. );
  365. var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));
  366. array(3) {
  367. ["0.1"]=>
  368. object(cr)#%d (2) {
  369. ["priv_member":"cr":private]=>
  370. int(9)
  371. ["public_member"]=>
  372. int(9)
  373. }
  374. ["0.5"]=>
  375. object(cr)#%d (2) {
  376. ["priv_member":"cr":private]=>
  377. int(12)
  378. ["public_member"]=>
  379. int(12)
  380. }
  381. [0]=>
  382. object(cr)#%d (2) {
  383. ["priv_member":"cr":private]=>
  384. int(23)
  385. ["public_member"]=>
  386. int(23)
  387. }
  388. }
  389. $a=array (
  390. '0.1' =>
  391. cr::__set_state(array(
  392. 'priv_member' => 9,
  393. 'public_member' => 9,
  394. )),
  395. '0.5' =>
  396. cr::__set_state(array(
  397. 'priv_member' => 12,
  398. 'public_member' => 12,
  399. )),
  400. 0 =>
  401. cr::__set_state(array(
  402. 'priv_member' => 23,
  403. 'public_member' => 23,
  404. )),
  405. 1 =>
  406. cr::__set_state(array(
  407. 'priv_member' => 4,
  408. 'public_member' => 4,
  409. )),
  410. 2 =>
  411. cr::__set_state(array(
  412. 'priv_member' => -15,
  413. 'public_member' => -15,
  414. )),
  415. );
  416. $b=array (
  417. '0.2' =>
  418. cr::__set_state(array(
  419. 'priv_member' => 9,
  420. 'public_member' => 9,
  421. )),
  422. '0.5' =>
  423. cr::__set_state(array(
  424. 'priv_member' => 22,
  425. 'public_member' => 22,
  426. )),
  427. 0 =>
  428. cr::__set_state(array(
  429. 'priv_member' => 3,
  430. 'public_member' => 3,
  431. )),
  432. 1 =>
  433. cr::__set_state(array(
  434. 'priv_member' => 4,
  435. 'public_member' => 4,
  436. )),
  437. 2 =>
  438. cr::__set_state(array(
  439. 'priv_member' => -15,
  440. 'public_member' => -15,
  441. )),
  442. );
  443. var_dump(array_udiff($a, $b, "comp_func_cr"));
  444. array(2) {
  445. ["0.5"]=>
  446. object(cr)#%d (2) {
  447. ["priv_member":"cr":private]=>
  448. int(12)
  449. ["public_member"]=>
  450. int(12)
  451. }
  452. [0]=>
  453. object(cr)#%d (2) {
  454. ["priv_member":"cr":private]=>
  455. int(23)
  456. ["public_member"]=>
  457. int(23)
  458. }
  459. }
  460. $a=array (
  461. '0.1' =>
  462. cr::__set_state(array(
  463. 'priv_member' => 9,
  464. 'public_member' => 9,
  465. )),
  466. '0.5' =>
  467. cr::__set_state(array(
  468. 'priv_member' => 12,
  469. 'public_member' => 12,
  470. )),
  471. 0 =>
  472. cr::__set_state(array(
  473. 'priv_member' => 23,
  474. 'public_member' => 23,
  475. )),
  476. 1 =>
  477. cr::__set_state(array(
  478. 'priv_member' => 4,
  479. 'public_member' => 4,
  480. )),
  481. 2 =>
  482. cr::__set_state(array(
  483. 'priv_member' => -15,
  484. 'public_member' => -15,
  485. )),
  486. );
  487. $b=array (
  488. '0.2' =>
  489. cr::__set_state(array(
  490. 'priv_member' => 9,
  491. 'public_member' => 9,
  492. )),
  493. '0.5' =>
  494. cr::__set_state(array(
  495. 'priv_member' => 22,
  496. 'public_member' => 22,
  497. )),
  498. 0 =>
  499. cr::__set_state(array(
  500. 'priv_member' => 3,
  501. 'public_member' => 3,
  502. )),
  503. 1 =>
  504. cr::__set_state(array(
  505. 'priv_member' => 4,
  506. 'public_member' => 4,
  507. )),
  508. 2 =>
  509. cr::__set_state(array(
  510. 'priv_member' => -15,
  511. 'public_member' => -15,
  512. )),
  513. );
  514. var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));
  515. array(3) {
  516. ["0.1"]=>
  517. object(cr)#%d (2) {
  518. ["priv_member":"cr":private]=>
  519. int(9)
  520. ["public_member"]=>
  521. int(9)
  522. }
  523. ["0.5"]=>
  524. object(cr)#%d (2) {
  525. ["priv_member":"cr":private]=>
  526. int(12)
  527. ["public_member"]=>
  528. int(12)
  529. }
  530. [0]=>
  531. object(cr)#%d (2) {
  532. ["priv_member":"cr":private]=>
  533. int(23)
  534. ["public_member"]=>
  535. int(23)
  536. }
  537. }