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