each.phpt 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  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. Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
  91. -- Iteration 0 --
  92. array(4) {
  93. [1]=>
  94. int(0)
  95. ["value"]=>
  96. int(0)
  97. [0]=>
  98. int(0)
  99. ["key"]=>
  100. int(0)
  101. }
  102. bool(false)
  103. array(4) {
  104. [1]=>
  105. int(0)
  106. ["value"]=>
  107. int(0)
  108. [0]=>
  109. int(0)
  110. ["key"]=>
  111. int(0)
  112. }
  113. -- Iteration 1 --
  114. array(4) {
  115. [1]=>
  116. int(1)
  117. ["value"]=>
  118. int(1)
  119. [0]=>
  120. int(0)
  121. ["key"]=>
  122. int(0)
  123. }
  124. bool(false)
  125. array(4) {
  126. [1]=>
  127. int(1)
  128. ["value"]=>
  129. int(1)
  130. [0]=>
  131. int(0)
  132. ["key"]=>
  133. int(0)
  134. }
  135. -- Iteration 2 --
  136. array(4) {
  137. [1]=>
  138. int(-1)
  139. ["value"]=>
  140. int(-1)
  141. [0]=>
  142. int(0)
  143. ["key"]=>
  144. int(0)
  145. }
  146. bool(false)
  147. array(4) {
  148. [1]=>
  149. int(-1)
  150. ["value"]=>
  151. int(-1)
  152. [0]=>
  153. int(0)
  154. ["key"]=>
  155. int(0)
  156. }
  157. -- Iteration 3 --
  158. array(4) {
  159. [1]=>
  160. int(1)
  161. ["value"]=>
  162. int(1)
  163. [0]=>
  164. int(0)
  165. ["key"]=>
  166. int(0)
  167. }
  168. array(4) {
  169. [1]=>
  170. int(2)
  171. ["value"]=>
  172. int(2)
  173. [0]=>
  174. int(1)
  175. ["key"]=>
  176. int(1)
  177. }
  178. array(4) {
  179. [1]=>
  180. int(3)
  181. ["value"]=>
  182. int(3)
  183. [0]=>
  184. int(2)
  185. ["key"]=>
  186. int(2)
  187. }
  188. array(4) {
  189. [1]=>
  190. int(4)
  191. ["value"]=>
  192. int(4)
  193. [0]=>
  194. int(3)
  195. ["key"]=>
  196. int(3)
  197. }
  198. array(4) {
  199. [1]=>
  200. int(5)
  201. ["value"]=>
  202. int(5)
  203. [0]=>
  204. int(4)
  205. ["key"]=>
  206. int(4)
  207. }
  208. bool(false)
  209. array(4) {
  210. [1]=>
  211. int(1)
  212. ["value"]=>
  213. int(1)
  214. [0]=>
  215. int(0)
  216. ["key"]=>
  217. int(0)
  218. }
  219. -- Iteration 4 --
  220. array(4) {
  221. [1]=>
  222. int(-1)
  223. ["value"]=>
  224. int(-1)
  225. [0]=>
  226. int(0)
  227. ["key"]=>
  228. int(0)
  229. }
  230. array(4) {
  231. [1]=>
  232. int(-2)
  233. ["value"]=>
  234. int(-2)
  235. [0]=>
  236. int(1)
  237. ["key"]=>
  238. int(1)
  239. }
  240. array(4) {
  241. [1]=>
  242. int(-3)
  243. ["value"]=>
  244. int(-3)
  245. [0]=>
  246. int(2)
  247. ["key"]=>
  248. int(2)
  249. }
  250. array(4) {
  251. [1]=>
  252. int(6)
  253. ["value"]=>
  254. int(6)
  255. [0]=>
  256. int(3)
  257. ["key"]=>
  258. int(3)
  259. }
  260. array(4) {
  261. [1]=>
  262. int(7)
  263. ["value"]=>
  264. int(7)
  265. [0]=>
  266. int(4)
  267. ["key"]=>
  268. int(4)
  269. }
  270. array(4) {
  271. [1]=>
  272. int(8)
  273. ["value"]=>
  274. int(8)
  275. [0]=>
  276. int(5)
  277. ["key"]=>
  278. int(5)
  279. }
  280. bool(false)
  281. array(4) {
  282. [1]=>
  283. int(-1)
  284. ["value"]=>
  285. int(-1)
  286. [0]=>
  287. int(0)
  288. ["key"]=>
  289. int(0)
  290. }
  291. -- Iteration 5 --
  292. array(4) {
  293. [1]=>
  294. string(1) "a"
  295. ["value"]=>
  296. string(1) "a"
  297. [0]=>
  298. int(0)
  299. ["key"]=>
  300. int(0)
  301. }
  302. array(4) {
  303. [1]=>
  304. string(2) "ab"
  305. ["value"]=>
  306. string(2) "ab"
  307. [0]=>
  308. int(1)
  309. ["key"]=>
  310. int(1)
  311. }
  312. array(4) {
  313. [1]=>
  314. string(3) "abc"
  315. ["value"]=>
  316. string(3) "abc"
  317. [0]=>
  318. int(2)
  319. ["key"]=>
  320. int(2)
  321. }
  322. array(4) {
  323. [1]=>
  324. string(4) "abcd"
  325. ["value"]=>
  326. string(4) "abcd"
  327. [0]=>
  328. int(3)
  329. ["key"]=>
  330. int(3)
  331. }
  332. bool(false)
  333. array(4) {
  334. [1]=>
  335. string(1) "a"
  336. ["value"]=>
  337. string(1) "a"
  338. [0]=>
  339. int(0)
  340. ["key"]=>
  341. int(0)
  342. }
  343. -- Iteration 6 --
  344. array(4) {
  345. [1]=>
  346. string(3) "one"
  347. ["value"]=>
  348. string(3) "one"
  349. [0]=>
  350. int(1)
  351. ["key"]=>
  352. int(1)
  353. }
  354. array(4) {
  355. [1]=>
  356. string(3) "two"
  357. ["value"]=>
  358. string(3) "two"
  359. [0]=>
  360. int(2)
  361. ["key"]=>
  362. int(2)
  363. }
  364. array(4) {
  365. [1]=>
  366. string(5) "three"
  367. ["value"]=>
  368. string(5) "three"
  369. [0]=>
  370. int(3)
  371. ["key"]=>
  372. int(3)
  373. }
  374. array(4) {
  375. [1]=>
  376. string(4) "four"
  377. ["value"]=>
  378. string(4) "four"
  379. [0]=>
  380. int(4)
  381. ["key"]=>
  382. int(4)
  383. }
  384. bool(false)
  385. array(4) {
  386. [1]=>
  387. string(3) "one"
  388. ["value"]=>
  389. string(3) "one"
  390. [0]=>
  391. int(1)
  392. ["key"]=>
  393. int(1)
  394. }
  395. -- Iteration 7 --
  396. array(4) {
  397. [1]=>
  398. int(1)
  399. ["value"]=>
  400. int(1)
  401. [0]=>
  402. string(3) "one"
  403. ["key"]=>
  404. string(3) "one"
  405. }
  406. array(4) {
  407. [1]=>
  408. int(2)
  409. ["value"]=>
  410. int(2)
  411. [0]=>
  412. string(3) "two"
  413. ["key"]=>
  414. string(3) "two"
  415. }
  416. array(4) {
  417. [1]=>
  418. string(5) "three"
  419. ["value"]=>
  420. string(5) "three"
  421. [0]=>
  422. int(3)
  423. ["key"]=>
  424. int(3)
  425. }
  426. array(4) {
  427. [1]=>
  428. int(4)
  429. ["value"]=>
  430. int(4)
  431. [0]=>
  432. int(4)
  433. ["key"]=>
  434. int(4)
  435. }
  436. array(4) {
  437. [1]=>
  438. NULL
  439. ["value"]=>
  440. NULL
  441. [0]=>
  442. string(0) ""
  443. ["key"]=>
  444. string(0) ""
  445. }
  446. array(4) {
  447. [1]=>
  448. int(6)
  449. ["value"]=>
  450. int(6)
  451. [0]=>
  452. string(2) " "
  453. ["key"]=>
  454. string(2) " "
  455. }
  456. array(4) {
  457. [1]=>
  458. string(1) "�"
  459. ["value"]=>
  460. string(1) "�"
  461. [0]=>
  462. string(1) "�"
  463. ["key"]=>
  464. string(1) "�"
  465. }
  466. array(4) {
  467. [1]=>
  468. bool(true)
  469. ["value"]=>
  470. bool(true)
  471. [0]=>
  472. int(1)
  473. ["key"]=>
  474. int(1)
  475. }
  476. array(4) {
  477. [1]=>
  478. bool(false)
  479. ["value"]=>
  480. bool(false)
  481. [0]=>
  482. int(0)
  483. ["key"]=>
  484. int(0)
  485. }
  486. bool(false)
  487. array(4) {
  488. [1]=>
  489. int(1)
  490. ["value"]=>
  491. int(1)
  492. [0]=>
  493. string(3) "one"
  494. ["key"]=>
  495. string(3) "one"
  496. }
  497. -- Iteration 8 --
  498. array(4) {
  499. [1]=>
  500. string(5) "one.5"
  501. ["value"]=>
  502. string(5) "one.5"
  503. [0]=>
  504. string(3) "1.5"
  505. ["key"]=>
  506. string(3) "1.5"
  507. }
  508. array(4) {
  509. [1]=>
  510. string(11) "negative2.0"
  511. ["value"]=>
  512. string(11) "negative2.0"
  513. [0]=>
  514. string(4) "-2.0"
  515. ["key"]=>
  516. string(4) "-2.0"
  517. }
  518. bool(false)
  519. array(4) {
  520. [1]=>
  521. string(5) "one.5"
  522. ["value"]=>
  523. string(5) "one.5"
  524. [0]=>
  525. string(3) "1.5"
  526. ["key"]=>
  527. string(3) "1.5"
  528. }
  529. -- Iteration 9 --
  530. array(4) {
  531. [1]=>
  532. string(9) "negative5"
  533. ["value"]=>
  534. string(9) "negative5"
  535. [0]=>
  536. int(-5)
  537. ["key"]=>
  538. int(-5)
  539. }
  540. array(4) {
  541. [1]=>
  542. string(11) "negative.05"
  543. ["value"]=>
  544. string(11) "negative.05"
  545. [0]=>
  546. int(0)
  547. ["key"]=>
  548. int(0)
  549. }
  550. bool(false)
  551. array(4) {
  552. [1]=>
  553. string(9) "negative5"
  554. ["value"]=>
  555. string(9) "negative5"
  556. [0]=>
  557. int(-5)
  558. ["key"]=>
  559. int(-5)
  560. }
  561. *** Testing each() : possible variations ***
  562. -- Testing each() with reset() function --
  563. array(1) {
  564. [0]=>
  565. int(0)
  566. }
  567. array(4) {
  568. [1]=>
  569. array(1) {
  570. [0]=>
  571. int(0)
  572. }
  573. ["value"]=>
  574. array(1) {
  575. [0]=>
  576. int(0)
  577. }
  578. [0]=>
  579. int(0)
  580. ["key"]=>
  581. int(0)
  582. }
  583. array(4) {
  584. [1]=>
  585. int(1)
  586. ["value"]=>
  587. int(1)
  588. [0]=>
  589. int(0)
  590. ["key"]=>
  591. int(0)
  592. }
  593. -- Testing each() with resources --
  594. array(4) {
  595. [1]=>
  596. resource(%d) of type (stream)
  597. ["value"]=>
  598. resource(%d) of type (stream)
  599. [0]=>
  600. string(4) "file"
  601. ["key"]=>
  602. string(4) "file"
  603. }
  604. array(4) {
  605. [1]=>
  606. resource(%d) of type (stream)
  607. ["value"]=>
  608. resource(%d) of type (stream)
  609. [0]=>
  610. string(3) "dir"
  611. ["key"]=>
  612. string(3) "dir"
  613. }
  614. -- Testing each with objects --
  615. array(4) {
  616. [1]=>
  617. int(100)
  618. ["value"]=>
  619. int(100)
  620. [0]=>
  621. string(23) "�each_class�var_private"
  622. ["key"]=>
  623. string(23) "�each_class�var_private"
  624. }
  625. array(4) {
  626. [1]=>
  627. string(6) "string"
  628. ["value"]=>
  629. string(6) "string"
  630. [0]=>
  631. string(16) "�*�var_protected"
  632. ["key"]=>
  633. string(16) "�*�var_protected"
  634. }
  635. array(4) {
  636. [1]=>
  637. array(4) {
  638. [0]=>
  639. int(0)
  640. [1]=>
  641. int(1)
  642. [2]=>
  643. bool(true)
  644. [3]=>
  645. NULL
  646. }
  647. ["value"]=>
  648. array(4) {
  649. [0]=>
  650. int(0)
  651. [1]=>
  652. int(1)
  653. [2]=>
  654. bool(true)
  655. [3]=>
  656. NULL
  657. }
  658. [0]=>
  659. string(10) "var_public"
  660. ["key"]=>
  661. string(10) "var_public"
  662. }
  663. -- Testing each() with null array --
  664. bool(false)
  665. *** Testing error conditions ***
  666. Warning: each() expects exactly 1 parameter, 0 given in %s on line %d
  667. NULL
  668. Warning: each() expects exactly 1 parameter, 2 given in %s on line %d
  669. NULL
  670. Warning: Variable passed to each() is not an array or object in %s on line %d
  671. NULL
  672. Warning: Variable passed to each() is not an array or object in %s on line %d
  673. NULL
  674. Warning: Variable passed to each() is not an array or object in %s on line %d
  675. NULL
  676. Done