each.phpt 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  1. --TEST--
  2. Test each() function
  3. --FILE--
  4. <?php
  5. /* Return the current key and value pair from an array
  6. and advance the array cursor */
  7. echo "*** Testing each() : basic functionality ***\n";
  8. $arrays = array (
  9. array(0),
  10. array(1),
  11. array(-1),
  12. array(1, 2, 3, 4, 5),
  13. array(-1, -2, -3, 6, 7, 8),
  14. array("a", "ab", "abc", "abcd"),
  15. array("1" => "one", "2" => "two", "3" => "three", "4" => "four"),
  16. array("one" => 1, "two" => 2, 3 => "three", 4 => 4, "" => 5,
  17. " " => 6, "\x00" => "\x000", "\0" => "\0", "" => "",
  18. TRUE => TRUE, FALSE => FALSE, NULL => NULL
  19. ),
  20. array("1.5" => "one.5", "-2.0" => "negative2.0"),
  21. array(-5 => "negative5", -.05 => "negative.05")
  22. );
  23. /* loop through to check working of each() on different arrays */
  24. $i = 0;
  25. while( list( $key, $sub_array) = each($arrays) ) {
  26. echo "-- Iteration $i --\n";
  27. $c = count ($sub_array);
  28. $c++; // increment by one to create the situation
  29. // of accessing beyond array size
  30. while ( $c ) {
  31. var_dump( each($sub_array) );
  32. $c --;
  33. }
  34. /* assignment of an array to another variable resets the internal
  35. pointer of the array. check this and ensure that each returns
  36. the first element after the assignment */
  37. $new_array = $sub_array;
  38. var_dump( each($sub_array) );
  39. echo "\n";
  40. $i++;
  41. }
  42. echo "\n*** Testing each() : possible variations ***\n";
  43. echo "-- Testing each() with reset() function --\n";
  44. /* reset the $arrays and use each to get the first element */
  45. var_dump( reset($arrays) );
  46. var_dump( each($arrays) ); // first element
  47. list($key, $sub_array) = each($arrays); // now second element
  48. var_dump( each($sub_array) );
  49. echo "-- Testing each() with resources --\n";
  50. $fp = fopen(__FILE__, "r");
  51. $dfp = opendir(".");
  52. $resources = array (
  53. "file" => $fp,
  54. "dir" => $dfp
  55. );
  56. for( $i = 0; $i < count($resources); $i++) {
  57. var_dump( each($resources) );
  58. }
  59. echo "-- Testing each with objects --\n";
  60. class each_class {
  61. private $var_private = 100;
  62. protected $var_protected = "string";
  63. public $var_public = array(0, 1, TRUE, NULL);
  64. }
  65. $each_obj = new each_class();
  66. for( $i = 0; $i <= 2; $i++ ) {
  67. var_dump( each($each_obj) );
  68. }
  69. echo "-- Testing each() with null array --\n";
  70. $null_array = array();
  71. var_dump( each($null_array) );
  72. echo "\n*** Testing error conditions ***\n";
  73. /* unexpected number of arguments */
  74. var_dump( each() ); // args = 0
  75. var_dump( each($null_array, $null_array) ); // args > expected
  76. /* unexpected argument type */
  77. $var=1;
  78. $str ="string";
  79. $fl = "15.5";
  80. var_dump( each($var) );
  81. var_dump( each($str) );
  82. var_dump( each($fl) );
  83. // close resourses used
  84. fclose($fp);
  85. closedir($dfp);
  86. echo "Done\n";
  87. ?>
  88. --EXPECTF--
  89. *** Testing each() : basic functionality ***
  90. -- Iteration 0 --
  91. array(4) {
  92. [1]=>
  93. int(0)
  94. ["value"]=>
  95. int(0)
  96. [0]=>
  97. int(0)
  98. ["key"]=>
  99. int(0)
  100. }
  101. bool(false)
  102. array(4) {
  103. [1]=>
  104. int(0)
  105. ["value"]=>
  106. int(0)
  107. [0]=>
  108. int(0)
  109. ["key"]=>
  110. int(0)
  111. }
  112. -- Iteration 1 --
  113. array(4) {
  114. [1]=>
  115. int(1)
  116. ["value"]=>
  117. int(1)
  118. [0]=>
  119. int(0)
  120. ["key"]=>
  121. int(0)
  122. }
  123. bool(false)
  124. array(4) {
  125. [1]=>
  126. int(1)
  127. ["value"]=>
  128. int(1)
  129. [0]=>
  130. int(0)
  131. ["key"]=>
  132. int(0)
  133. }
  134. -- Iteration 2 --
  135. array(4) {
  136. [1]=>
  137. int(-1)
  138. ["value"]=>
  139. int(-1)
  140. [0]=>
  141. int(0)
  142. ["key"]=>
  143. int(0)
  144. }
  145. bool(false)
  146. array(4) {
  147. [1]=>
  148. int(-1)
  149. ["value"]=>
  150. int(-1)
  151. [0]=>
  152. int(0)
  153. ["key"]=>
  154. int(0)
  155. }
  156. -- Iteration 3 --
  157. array(4) {
  158. [1]=>
  159. int(1)
  160. ["value"]=>
  161. int(1)
  162. [0]=>
  163. int(0)
  164. ["key"]=>
  165. int(0)
  166. }
  167. array(4) {
  168. [1]=>
  169. int(2)
  170. ["value"]=>
  171. int(2)
  172. [0]=>
  173. int(1)
  174. ["key"]=>
  175. int(1)
  176. }
  177. array(4) {
  178. [1]=>
  179. int(3)
  180. ["value"]=>
  181. int(3)
  182. [0]=>
  183. int(2)
  184. ["key"]=>
  185. int(2)
  186. }
  187. array(4) {
  188. [1]=>
  189. int(4)
  190. ["value"]=>
  191. int(4)
  192. [0]=>
  193. int(3)
  194. ["key"]=>
  195. int(3)
  196. }
  197. array(4) {
  198. [1]=>
  199. int(5)
  200. ["value"]=>
  201. int(5)
  202. [0]=>
  203. int(4)
  204. ["key"]=>
  205. int(4)
  206. }
  207. bool(false)
  208. array(4) {
  209. [1]=>
  210. int(1)
  211. ["value"]=>
  212. int(1)
  213. [0]=>
  214. int(0)
  215. ["key"]=>
  216. int(0)
  217. }
  218. -- Iteration 4 --
  219. array(4) {
  220. [1]=>
  221. int(-1)
  222. ["value"]=>
  223. int(-1)
  224. [0]=>
  225. int(0)
  226. ["key"]=>
  227. int(0)
  228. }
  229. array(4) {
  230. [1]=>
  231. int(-2)
  232. ["value"]=>
  233. int(-2)
  234. [0]=>
  235. int(1)
  236. ["key"]=>
  237. int(1)
  238. }
  239. array(4) {
  240. [1]=>
  241. int(-3)
  242. ["value"]=>
  243. int(-3)
  244. [0]=>
  245. int(2)
  246. ["key"]=>
  247. int(2)
  248. }
  249. array(4) {
  250. [1]=>
  251. int(6)
  252. ["value"]=>
  253. int(6)
  254. [0]=>
  255. int(3)
  256. ["key"]=>
  257. int(3)
  258. }
  259. array(4) {
  260. [1]=>
  261. int(7)
  262. ["value"]=>
  263. int(7)
  264. [0]=>
  265. int(4)
  266. ["key"]=>
  267. int(4)
  268. }
  269. array(4) {
  270. [1]=>
  271. int(8)
  272. ["value"]=>
  273. int(8)
  274. [0]=>
  275. int(5)
  276. ["key"]=>
  277. int(5)
  278. }
  279. bool(false)
  280. array(4) {
  281. [1]=>
  282. int(-1)
  283. ["value"]=>
  284. int(-1)
  285. [0]=>
  286. int(0)
  287. ["key"]=>
  288. int(0)
  289. }
  290. -- Iteration 5 --
  291. array(4) {
  292. [1]=>
  293. string(1) "a"
  294. ["value"]=>
  295. string(1) "a"
  296. [0]=>
  297. int(0)
  298. ["key"]=>
  299. int(0)
  300. }
  301. array(4) {
  302. [1]=>
  303. string(2) "ab"
  304. ["value"]=>
  305. string(2) "ab"
  306. [0]=>
  307. int(1)
  308. ["key"]=>
  309. int(1)
  310. }
  311. array(4) {
  312. [1]=>
  313. string(3) "abc"
  314. ["value"]=>
  315. string(3) "abc"
  316. [0]=>
  317. int(2)
  318. ["key"]=>
  319. int(2)
  320. }
  321. array(4) {
  322. [1]=>
  323. string(4) "abcd"
  324. ["value"]=>
  325. string(4) "abcd"
  326. [0]=>
  327. int(3)
  328. ["key"]=>
  329. int(3)
  330. }
  331. bool(false)
  332. array(4) {
  333. [1]=>
  334. string(1) "a"
  335. ["value"]=>
  336. string(1) "a"
  337. [0]=>
  338. int(0)
  339. ["key"]=>
  340. int(0)
  341. }
  342. -- Iteration 6 --
  343. array(4) {
  344. [1]=>
  345. string(3) "one"
  346. ["value"]=>
  347. string(3) "one"
  348. [0]=>
  349. int(1)
  350. ["key"]=>
  351. int(1)
  352. }
  353. array(4) {
  354. [1]=>
  355. string(3) "two"
  356. ["value"]=>
  357. string(3) "two"
  358. [0]=>
  359. int(2)
  360. ["key"]=>
  361. int(2)
  362. }
  363. array(4) {
  364. [1]=>
  365. string(5) "three"
  366. ["value"]=>
  367. string(5) "three"
  368. [0]=>
  369. int(3)
  370. ["key"]=>
  371. int(3)
  372. }
  373. array(4) {
  374. [1]=>
  375. string(4) "four"
  376. ["value"]=>
  377. string(4) "four"
  378. [0]=>
  379. int(4)
  380. ["key"]=>
  381. int(4)
  382. }
  383. bool(false)
  384. array(4) {
  385. [1]=>
  386. string(3) "one"
  387. ["value"]=>
  388. string(3) "one"
  389. [0]=>
  390. int(1)
  391. ["key"]=>
  392. int(1)
  393. }
  394. -- Iteration 7 --
  395. array(4) {
  396. [1]=>
  397. int(1)
  398. ["value"]=>
  399. int(1)
  400. [0]=>
  401. string(3) "one"
  402. ["key"]=>
  403. string(3) "one"
  404. }
  405. array(4) {
  406. [1]=>
  407. int(2)
  408. ["value"]=>
  409. int(2)
  410. [0]=>
  411. string(3) "two"
  412. ["key"]=>
  413. string(3) "two"
  414. }
  415. array(4) {
  416. [1]=>
  417. string(5) "three"
  418. ["value"]=>
  419. string(5) "three"
  420. [0]=>
  421. int(3)
  422. ["key"]=>
  423. int(3)
  424. }
  425. array(4) {
  426. [1]=>
  427. int(4)
  428. ["value"]=>
  429. int(4)
  430. [0]=>
  431. int(4)
  432. ["key"]=>
  433. int(4)
  434. }
  435. array(4) {
  436. [1]=>
  437. NULL
  438. ["value"]=>
  439. NULL
  440. [0]=>
  441. string(0) ""
  442. ["key"]=>
  443. string(0) ""
  444. }
  445. array(4) {
  446. [1]=>
  447. int(6)
  448. ["value"]=>
  449. int(6)
  450. [0]=>
  451. string(2) " "
  452. ["key"]=>
  453. string(2) " "
  454. }
  455. array(4) {
  456. [1]=>
  457. string(1) "�"
  458. ["value"]=>
  459. string(1) "�"
  460. [0]=>
  461. string(1) "�"
  462. ["key"]=>
  463. string(1) "�"
  464. }
  465. array(4) {
  466. [1]=>
  467. bool(true)
  468. ["value"]=>
  469. bool(true)
  470. [0]=>
  471. int(1)
  472. ["key"]=>
  473. int(1)
  474. }
  475. array(4) {
  476. [1]=>
  477. bool(false)
  478. ["value"]=>
  479. bool(false)
  480. [0]=>
  481. int(0)
  482. ["key"]=>
  483. int(0)
  484. }
  485. bool(false)
  486. array(4) {
  487. [1]=>
  488. int(1)
  489. ["value"]=>
  490. int(1)
  491. [0]=>
  492. string(3) "one"
  493. ["key"]=>
  494. string(3) "one"
  495. }
  496. -- Iteration 8 --
  497. array(4) {
  498. [1]=>
  499. string(5) "one.5"
  500. ["value"]=>
  501. string(5) "one.5"
  502. [0]=>
  503. string(3) "1.5"
  504. ["key"]=>
  505. string(3) "1.5"
  506. }
  507. array(4) {
  508. [1]=>
  509. string(11) "negative2.0"
  510. ["value"]=>
  511. string(11) "negative2.0"
  512. [0]=>
  513. string(4) "-2.0"
  514. ["key"]=>
  515. string(4) "-2.0"
  516. }
  517. bool(false)
  518. array(4) {
  519. [1]=>
  520. string(5) "one.5"
  521. ["value"]=>
  522. string(5) "one.5"
  523. [0]=>
  524. string(3) "1.5"
  525. ["key"]=>
  526. string(3) "1.5"
  527. }
  528. -- Iteration 9 --
  529. array(4) {
  530. [1]=>
  531. string(9) "negative5"
  532. ["value"]=>
  533. string(9) "negative5"
  534. [0]=>
  535. int(-5)
  536. ["key"]=>
  537. int(-5)
  538. }
  539. array(4) {
  540. [1]=>
  541. string(11) "negative.05"
  542. ["value"]=>
  543. string(11) "negative.05"
  544. [0]=>
  545. int(0)
  546. ["key"]=>
  547. int(0)
  548. }
  549. bool(false)
  550. array(4) {
  551. [1]=>
  552. string(9) "negative5"
  553. ["value"]=>
  554. string(9) "negative5"
  555. [0]=>
  556. int(-5)
  557. ["key"]=>
  558. int(-5)
  559. }
  560. *** Testing each() : possible variations ***
  561. -- Testing each() with reset() function --
  562. array(1) {
  563. [0]=>
  564. int(0)
  565. }
  566. array(4) {
  567. [1]=>
  568. array(1) {
  569. [0]=>
  570. int(0)
  571. }
  572. ["value"]=>
  573. array(1) {
  574. [0]=>
  575. int(0)
  576. }
  577. [0]=>
  578. int(0)
  579. ["key"]=>
  580. int(0)
  581. }
  582. array(4) {
  583. [1]=>
  584. int(1)
  585. ["value"]=>
  586. int(1)
  587. [0]=>
  588. int(0)
  589. ["key"]=>
  590. int(0)
  591. }
  592. -- Testing each() with resources --
  593. array(4) {
  594. [1]=>
  595. resource(%d) of type (stream)
  596. ["value"]=>
  597. resource(%d) of type (stream)
  598. [0]=>
  599. string(4) "file"
  600. ["key"]=>
  601. string(4) "file"
  602. }
  603. array(4) {
  604. [1]=>
  605. resource(%d) of type (stream)
  606. ["value"]=>
  607. resource(%d) of type (stream)
  608. [0]=>
  609. string(3) "dir"
  610. ["key"]=>
  611. string(3) "dir"
  612. }
  613. -- Testing each with objects --
  614. array(4) {
  615. [1]=>
  616. int(100)
  617. ["value"]=>
  618. int(100)
  619. [0]=>
  620. string(23) "�each_class�var_private"
  621. ["key"]=>
  622. string(23) "�each_class�var_private"
  623. }
  624. array(4) {
  625. [1]=>
  626. string(6) "string"
  627. ["value"]=>
  628. string(6) "string"
  629. [0]=>
  630. string(16) "�*�var_protected"
  631. ["key"]=>
  632. string(16) "�*�var_protected"
  633. }
  634. array(4) {
  635. [1]=>
  636. array(4) {
  637. [0]=>
  638. int(0)
  639. [1]=>
  640. int(1)
  641. [2]=>
  642. bool(true)
  643. [3]=>
  644. NULL
  645. }
  646. ["value"]=>
  647. array(4) {
  648. [0]=>
  649. int(0)
  650. [1]=>
  651. int(1)
  652. [2]=>
  653. bool(true)
  654. [3]=>
  655. NULL
  656. }
  657. [0]=>
  658. string(10) "var_public"
  659. ["key"]=>
  660. string(10) "var_public"
  661. }
  662. -- Testing each() with null array --
  663. bool(false)
  664. *** Testing error conditions ***
  665. Warning: each() expects exactly 1 parameter, 0 given in %s on line %d
  666. NULL
  667. Warning: each() expects exactly 1 parameter, 2 given in %s on line %d
  668. NULL
  669. Warning: Variable passed to each() is not an array or object in %s on line %d
  670. NULL
  671. Warning: Variable passed to each() is not an array or object in %s on line %d
  672. NULL
  673. Warning: Variable passed to each() is not an array or object in %s on line %d
  674. NULL
  675. Done