Return to serialization_arrays_005.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / standard / tests / serialize |
1.1 misho 1: --TEST-- 2: serialization: arrays with references, nested 3: --FILE-- 4: <?php 5: /* Prototype : proto string serialize(mixed variable) 6: * Description: Returns a string representation of variable (which can later be unserialized) 7: * Source code: ext/standard/var.c 8: * Alias to functions: 9: */ 10: /* Prototype : proto mixed unserialize(string variable_representation) 11: * Description: Takes a string representation of variable and recreates it 12: * Source code: ext/standard/var.c 13: * Alias to functions: 14: */ 15: 16: function check(&$a) { 17: var_dump($a); 18: $ser = serialize($a); 19: var_dump($ser); 20: 21: $b = unserialize($ser); 22: 23: // Change each element and dump result. 24: foreach($b as $k=>$v) { 25: if (is_array($v)){ 26: foreach($b[$k] as $sk=>$sv) { 27: $b[$k][$sk] = "b$k.$sk.changed"; 28: var_dump($b); 29: } 30: } else { 31: $b[$k] = "b$k.changed"; 32: var_dump($b); 33: } 34: } 35: } 36: 37: echo "\n\n--- Nested array references 1 element in containing array:\n"; 38: $a = array(); 39: $c = array(1,1,&$a); 40: $a[0] = &$c[0]; 41: $a[1] = 1; 42: check($c); 43: 44: echo "\n\n--- Nested array references 1 element in containing array (slightly different):\n"; 45: $a = array(); 46: $c = array(1,&$a,1); 47: $a[0] = 1; 48: $a[1] = &$c[0]; 49: check($c); 50: 51: echo "\n\n--- Nested array references 2 elements in containing array:\n"; 52: $a = array(); 53: $c = array(1,1,&$a); 54: $a[0] = &$c[0]; 55: $a[1] = &$c[1]; 56: check($c); 57: 58: 59: echo "\n\n--- Containing array references 1 element in nested array:\n"; 60: $a = array(); 61: $a[0] = 1; 62: $a[1] = 1; 63: $c = array(1,&$a[0],&$a); 64: check($c); 65: 66: echo "\n\n--- Containing array references 2 elements in nested array:\n"; 67: $a = array(); 68: $a[0] = 1; 69: $a[1] = 1; 70: $c = array(&$a[0],&$a[1],&$a); 71: check($c); 72: 73: echo "\n\n--- Nested array references container:\n"; 74: $a = array(); 75: $c = array(1,1,&$a); 76: $a[0] = 1; 77: $a[1] = &$c; 78: check($c); 79: 80: ?> 81: --EXPECTF-- 82: --- Nested array references 1 element in containing array: 83: array(3) { 84: [0]=> 85: &int(1) 86: [1]=> 87: int(1) 88: [2]=> 89: &array(2) { 90: [0]=> 91: &int(1) 92: [1]=> 93: int(1) 94: } 95: } 96: string(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;i:1;}}" 97: array(3) { 98: [0]=> 99: &string(10) "b0.changed" 100: [1]=> 101: int(1) 102: [2]=> 103: array(2) { 104: [0]=> 105: &string(10) "b0.changed" 106: [1]=> 107: int(1) 108: } 109: } 110: array(3) { 111: [0]=> 112: &string(10) "b0.changed" 113: [1]=> 114: string(10) "b1.changed" 115: [2]=> 116: array(2) { 117: [0]=> 118: &string(10) "b0.changed" 119: [1]=> 120: int(1) 121: } 122: } 123: array(3) { 124: [0]=> 125: &string(12) "b2.0.changed" 126: [1]=> 127: string(10) "b1.changed" 128: [2]=> 129: array(2) { 130: [0]=> 131: &string(12) "b2.0.changed" 132: [1]=> 133: int(1) 134: } 135: } 136: array(3) { 137: [0]=> 138: &string(12) "b2.0.changed" 139: [1]=> 140: string(10) "b1.changed" 141: [2]=> 142: array(2) { 143: [0]=> 144: &string(12) "b2.0.changed" 145: [1]=> 146: string(12) "b2.1.changed" 147: } 148: } 149: 150: 151: --- Nested array references 1 element in containing array (slightly different): 152: array(3) { 153: [0]=> 154: &int(1) 155: [1]=> 156: &array(2) { 157: [0]=> 158: int(1) 159: [1]=> 160: &int(1) 161: } 162: [2]=> 163: int(1) 164: } 165: string(48) "a:3:{i:0;i:1;i:1;a:2:{i:0;i:1;i:1;R:2;}i:2;i:1;}" 166: array(3) { 167: [0]=> 168: &string(10) "b0.changed" 169: [1]=> 170: array(2) { 171: [0]=> 172: int(1) 173: [1]=> 174: &string(10) "b0.changed" 175: } 176: [2]=> 177: int(1) 178: } 179: array(3) { 180: [0]=> 181: &string(10) "b0.changed" 182: [1]=> 183: array(2) { 184: [0]=> 185: string(12) "b1.0.changed" 186: [1]=> 187: &string(10) "b0.changed" 188: } 189: [2]=> 190: int(1) 191: } 192: array(3) { 193: [0]=> 194: &string(12) "b1.1.changed" 195: [1]=> 196: array(2) { 197: [0]=> 198: string(12) "b1.0.changed" 199: [1]=> 200: &string(12) "b1.1.changed" 201: } 202: [2]=> 203: int(1) 204: } 205: array(3) { 206: [0]=> 207: &string(12) "b1.1.changed" 208: [1]=> 209: array(2) { 210: [0]=> 211: string(12) "b1.0.changed" 212: [1]=> 213: &string(12) "b1.1.changed" 214: } 215: [2]=> 216: string(10) "b2.changed" 217: } 218: 219: 220: --- Nested array references 2 elements in containing array: 221: array(3) { 222: [0]=> 223: &int(1) 224: [1]=> 225: &int(1) 226: [2]=> 227: &array(2) { 228: [0]=> 229: &int(1) 230: [1]=> 231: &int(1) 232: } 233: } 234: string(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;R:3;}}" 235: array(3) { 236: [0]=> 237: &string(10) "b0.changed" 238: [1]=> 239: &int(1) 240: [2]=> 241: array(2) { 242: [0]=> 243: &string(10) "b0.changed" 244: [1]=> 245: &int(1) 246: } 247: } 248: array(3) { 249: [0]=> 250: &string(10) "b0.changed" 251: [1]=> 252: &string(10) "b1.changed" 253: [2]=> 254: array(2) { 255: [0]=> 256: &string(10) "b0.changed" 257: [1]=> 258: &string(10) "b1.changed" 259: } 260: } 261: array(3) { 262: [0]=> 263: &string(12) "b2.0.changed" 264: [1]=> 265: &string(10) "b1.changed" 266: [2]=> 267: array(2) { 268: [0]=> 269: &string(12) "b2.0.changed" 270: [1]=> 271: &string(10) "b1.changed" 272: } 273: } 274: array(3) { 275: [0]=> 276: &string(12) "b2.0.changed" 277: [1]=> 278: &string(12) "b2.1.changed" 279: [2]=> 280: array(2) { 281: [0]=> 282: &string(12) "b2.0.changed" 283: [1]=> 284: &string(12) "b2.1.changed" 285: } 286: } 287: 288: 289: --- Containing array references 1 element in nested array: 290: array(3) { 291: [0]=> 292: int(1) 293: [1]=> 294: &int(1) 295: [2]=> 296: &array(2) { 297: [0]=> 298: &int(1) 299: [1]=> 300: int(1) 301: } 302: } 303: string(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:3;i:1;i:1;}}" 304: array(3) { 305: [0]=> 306: string(10) "b0.changed" 307: [1]=> 308: &int(1) 309: [2]=> 310: array(2) { 311: [0]=> 312: &int(1) 313: [1]=> 314: int(1) 315: } 316: } 317: array(3) { 318: [0]=> 319: string(10) "b0.changed" 320: [1]=> 321: &string(10) "b1.changed" 322: [2]=> 323: array(2) { 324: [0]=> 325: &string(10) "b1.changed" 326: [1]=> 327: int(1) 328: } 329: } 330: array(3) { 331: [0]=> 332: string(10) "b0.changed" 333: [1]=> 334: &string(12) "b2.0.changed" 335: [2]=> 336: array(2) { 337: [0]=> 338: &string(12) "b2.0.changed" 339: [1]=> 340: int(1) 341: } 342: } 343: array(3) { 344: [0]=> 345: string(10) "b0.changed" 346: [1]=> 347: &string(12) "b2.0.changed" 348: [2]=> 349: array(2) { 350: [0]=> 351: &string(12) "b2.0.changed" 352: [1]=> 353: string(12) "b2.1.changed" 354: } 355: } 356: 357: 358: --- Containing array references 2 elements in nested array: 359: array(3) { 360: [0]=> 361: &int(1) 362: [1]=> 363: &int(1) 364: [2]=> 365: &array(2) { 366: [0]=> 367: &int(1) 368: [1]=> 369: &int(1) 370: } 371: } 372: string(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;R:3;}}" 373: array(3) { 374: [0]=> 375: &string(10) "b0.changed" 376: [1]=> 377: &int(1) 378: [2]=> 379: array(2) { 380: [0]=> 381: &string(10) "b0.changed" 382: [1]=> 383: &int(1) 384: } 385: } 386: array(3) { 387: [0]=> 388: &string(10) "b0.changed" 389: [1]=> 390: &string(10) "b1.changed" 391: [2]=> 392: array(2) { 393: [0]=> 394: &string(10) "b0.changed" 395: [1]=> 396: &string(10) "b1.changed" 397: } 398: } 399: array(3) { 400: [0]=> 401: &string(12) "b2.0.changed" 402: [1]=> 403: &string(10) "b1.changed" 404: [2]=> 405: array(2) { 406: [0]=> 407: &string(12) "b2.0.changed" 408: [1]=> 409: &string(10) "b1.changed" 410: } 411: } 412: array(3) { 413: [0]=> 414: &string(12) "b2.0.changed" 415: [1]=> 416: &string(12) "b2.1.changed" 417: [2]=> 418: array(2) { 419: [0]=> 420: &string(12) "b2.0.changed" 421: [1]=> 422: &string(12) "b2.1.changed" 423: } 424: } 425: 426: 427: --- Nested array references container: 428: array(3) { 429: [0]=> 430: int(1) 431: [1]=> 432: int(1) 433: [2]=> 434: &array(2) { 435: [0]=> 436: int(1) 437: [1]=> 438: &array(3) { 439: [0]=> 440: int(1) 441: [1]=> 442: int(1) 443: [2]=> 444: *RECURSION* 445: } 446: } 447: } 448: string(74) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;i:1;i:1;a:3:{i:0;i:1;i:1;i:1;i:2;R:4;}}}" 449: array(3) { 450: [0]=> 451: string(10) "b0.changed" 452: [1]=> 453: int(1) 454: [2]=> 455: &array(2) { 456: [0]=> 457: int(1) 458: [1]=> 459: array(3) { 460: [0]=> 461: int(1) 462: [1]=> 463: int(1) 464: [2]=> 465: *RECURSION* 466: } 467: } 468: } 469: array(3) { 470: [0]=> 471: string(10) "b0.changed" 472: [1]=> 473: string(10) "b1.changed" 474: [2]=> 475: &array(2) { 476: [0]=> 477: int(1) 478: [1]=> 479: array(3) { 480: [0]=> 481: int(1) 482: [1]=> 483: int(1) 484: [2]=> 485: *RECURSION* 486: } 487: } 488: } 489: array(3) { 490: [0]=> 491: string(10) "b0.changed" 492: [1]=> 493: string(10) "b1.changed" 494: [2]=> 495: &array(2) { 496: [0]=> 497: string(12) "b2.0.changed" 498: [1]=> 499: array(3) { 500: [0]=> 501: int(1) 502: [1]=> 503: int(1) 504: [2]=> 505: *RECURSION* 506: } 507: } 508: } 509: array(3) { 510: [0]=> 511: string(10) "b0.changed" 512: [1]=> 513: string(10) "b1.changed" 514: [2]=> 515: &array(2) { 516: [0]=> 517: string(12) "b2.0.changed" 518: [1]=> 519: string(12) "b2.1.changed" 520: } 521: }