Guest User

Untitled

a guest
Oct 22nd, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. <?php
  2. /*
  3. * 配列をコピーすると内部ポインタがリセットされるテスト
  4. * TEST: Inner pointer of an array is reset when it is copied.
  5. *
  6. * foreach は最初に配列全体をメモリに展開するから、
  7. * while のが省メモリとかいう話を聞いた気がした。
  8. * そこで、while でループ回してたら無限ループにハマったのでメモ。
  9. * Because 'foreach' locate all of array on memory,
  10. * 'while' use lower memory.
  11. * I try to use 'while' but go into an infinite loop.
  12. */
  13.  
  14. // 配列
  15. $arr = array('hoge', 'fuga', 'foo', 'bar');
  16. // コピー先配列
  17. $arr_cp = null;
  18. // 配列長
  19. $len = count($arr);
  20. // カウンタ
  21. $i = 0;
  22.  
  23. while ((list($k, $v) = each($arr)) && $i < $len) {
  24. // 配列をコピーする
  25. $arr_cp = $arr;
  26. printf('%0d $k: %s, $v: %s'."\n", $i, $k, $v);
  27. $i++;
  28. }
  29.  
  30. unset($k, $v);
  31. reset($arr);
  32. $i = 0;
  33.  
  34. echo 'foreach'."\n";
  35. foreach ($arr as $k => $v) {
  36. // 配列をコピーする
  37. $arr_cp = $arr;
  38. printf('%0d $k: %s, $v: %s'."\n", $i, $k, $v);
  39. $i++;
  40. }
  41. ?>
Add Comment
Please, Sign In to add comment