PHP yield代替range生成范围内的数
2024-09-01 11:22:55
<?php
function yieldRange($start, $limit, $step)
{
if ($start == $limit || $step == 0) {
return $start;
} $mark = ($limit - $start > 0) == ($step > 0);
if (!$mark) {
$step = -$step;
} $distance = abs($limit - $start);
for ($i = $start; abs($start - $i) <= $distance; $i += $step) {
yield $i;
}
} $start = microtime(TRUE);
foreach (yieldRange(-1, 10, 1) as $number) {
echo "number$number : " . $number . "\n";
}
$end = microtime(TRUE);
echo "Time Used : " .($end - $start). "\n";
和 PHP 内部的函数 range() 对比了一下,在时间没看出有什么的优势,主要是在内存的使用 方式 上吧,有些情况 range() 的使用方式内存占用还是比较大的.
下面的情况内存使用情况的是差不多的:
yield.php
<?php
function yieldRange($start, $limit, $step)
{
if ($start == $limit || $step == 0) {
return $start;
} $mark = ($limit - $start > 0) == ($step > 0);
if (!$mark) {
$step = -$step;
} $distance = abs($limit - $start);
for ($i = $start; abs($start - $i) <= $distance; $i += $step) {
yield $i;
}
} echo "yield start memory : " . memory_get_usage()." bytes\n";
foreach (yieldRange(1, 10000, 1) as $yield) {
}
echo "yield end memory : " . memory_get_usage()." bytes\n";
range.php
<?php
echo "range() start memory : " . memory_get_usage()." bytes\n";
foreach (range(1, 10000, 1) as $range) {
}
echo "range() end memory : " . memory_get_usage()." bytes\n";
差不多就是 32 个字节的使用,刚好32位的指针地址.(平台可能有差异)
但是,如果直接把 range() 的返回值赋给一个变量,那就不只是 32 个字节的的问题了.
<?php
echo "range() start memory : " . memory_get_usage()." bytes\n";
$ranges = range(1, 10000, 1);
foreach ($ranges as $range) {
}
echo "range() end memory : " . memory_get_usage()." bytes\n";
最新文章
- 【转】jQuery获取Select option 选择的Text和Value
- crontab 的使用
- (译)如何优化cocos2d程序的内存使用和程序大小:第二部分(完)
- MySql 服务端与客户端下载地址
- Spark Streaming揭秘 Day32 WAL框架及实现
- java项目创建和部署
- Keil C调试经验
- Asp.Net HttpApplication请求管道与Session(一)
- AngularJS Directive - 开场小介绍(转)
- 五个典型的JavaScript面试题
- Struts2.5简单使用入门
- 通过SVG与CSS3实现向上图标
- PHP trait
- mariadb集群配置(主从和多主)
- Teradata的DBQL使用
- C++11 右值引用和转移语义
- 读取JPG图片的Exif属性(一) - Exif信息简介
- oracle 年龄计算 岁 月 天
- Swift - JPush极光推送的使用3(根据Alias别名,给某个指定用户发推送)(转)
- django学习笔记(3)
热门文章
- helm在kubernetes环境中搭建
- WInform中实现设置ZedGraph中曲线的X轴与Y轴的上限与下限
- C# https证书通信Post/Get(解决做ssl通道时遇到“请求被中止: 未能创建 SSL/TLS 安全通道”问题)
- Tomcat下java普通类IO文件路径问题
- 第八届蓝桥杯java b组第三题
- Linux-----centos6.2---安装Linux的流程
- SharePoint 2013 Create Folder with conententtype programer
- FastDfs之StorageServer的详细配置介绍
- 【SQL server基础】objectproperty()函数
- Bumblebee服务网关之统一请求验证