各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > PHP

浅谈PHP源码十九:关于array_file,range函数

管理员 2023-09-05
PHP
126

浅谈PHP源码十九:关于array_file,range函数

内容导读

收集整理的这篇技术教程文章主要介绍了浅谈PHP源码十九:关于array_file,range函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3029字,纯文字阅读大概需要5分钟

内容图文

这篇文章主要介绍了关于浅谈PHP源码十九:关于array_file,range函数,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

浅谈PHP源码十九:关于array_file,range函数

array_fill
(PHP 4 >= 4.2.0, PHP 5)

array_fill — 用给定的值填充数组
说明
array array_fill ( int start_index, int num, mixed value )

array_fill() 用 value 参数的值将一个数组填充 num 个条目,键名由 start_index 参数指定的开始。注意 num 必须是一个大于零的数值,否则 PHP 会发出一条警告。

对于参数start_index,只能是字符串,整形,浮点型
其源码如下:

switch (Z_TYPE_PP(start_key)) {case IS_STRING:case IS_LONG:case IS_DOUBLE:    .......    convert_to_long_ex(start_key);    ......}

程序首先赋值给return_value第一个值,然后循环num – 1次: 给这个值添加refcount,并将它添加到return_value的Hash Table中

range
(PHP 3 >= 3.0.8, PHP 4, PHP 5)

range — 建立一个包含指定范围单元的数组
说明
array range ( mixed low, mixed high [, number step] )

range() 返回数组中从 low 到 high 的单元,包括它们本身。如果 low > high,则序列将从 high 到 low。

新参数: 可选的 step 参数是 PHP 5.0.0 新加的。

如果给出了 step 的值,它将被作为单元之间的步进值。step 应该为正值。如果未指定,step 则默认为 1。

从代码可以看出,本函数仅支持字符数组,浮点数组和整形数组,并且支持递增和递减两种形式(在版本4.0.1之后才有)
以字符数组为例:

 if (Z_TYPE_P(zlow) == IS_STRING && Z_TYPE_P(zhigh) == IS_STRING && Z_STRLEN_P(zlow) >= 1 && Z_STRLEN_P(zhigh) >= 1) {    int type1, type2;    unsigned char *low, *high;    long lstep = (long) step;     type1 = is_numeric_string(Z_STRVAL_P(zlow), Z_STRLEN_P(zlow), NULL, NULL, 0);    type2 = is_numeric_string(Z_STRVAL_P(zhigh), Z_STRLEN_P(zhigh), NULL, NULL, 0);    if (type1 == IS_DOUBLE || type2 == IS_DOUBLE || is_step_double) {        goto double_str;    } else if (type1 == IS_LONG || type2 == IS_LONG) {        goto long_str;    }    convert_to_string(zlow);    //    转化为字符串,此函数的实现在zend_operators.c的536行:ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC)    convert_to_string(zhigh);    low = (unsigned char *)Z_STRVAL_P(zlow);    //    当所给字符串长度大于1时,取第一个字符    high = (unsigned char *)Z_STRVAL_P(zhigh);     if (*low > *high) { //    递减数组    if (lstep <= 0) {        err = 1;        goto err;    }    for (; *low >= *high; (*low) -= (unsigned int)lstep) {        add_next_index_stringl(return_value, low, 1, 1);        if (((signed int)*low - lstep) < 0) {            break;        }    }    } else if (*high > *low) { //    递增数组    if (lstep <= 0) {        err = 1;        goto err;    }    for (; *low <= *high; (*low) += (unsigned int)lstep) {        add_next_index_stringl(return_value, low, 1, 1);        if (((signed int)*low + lstep) > 255) {    //    只支持ASCII的255个字符            break;        }    }    } else {    //    开始和结束相等,则只返回包含一个元素的数组        add_next_index_stringl(return_value, low, 1, 1);}

对于浮点型和整形的处理基本类似,只有写入Hash Table的方法不同

浮点型用的是add_next_index_double
整形用的是add_next_index_long

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

浅谈PHP源码十八:关于array_diff_key,array_diff_assoc,array_udiff_assoc 函数

浅谈PHP源码十六:关于array_count_values函数

以上就是浅谈PHP源码十九:关于array_file,range函数的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的浅谈PHP源码十九:关于array_file,range函数全部内容,希望文章能够帮你解决浅谈PHP源码十九:关于array_file,range函数所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 lecms, classcms, fastadmin, pbootcms, phpcms, eyoucms, yzmcms, PHP, xunruicms, jizhicms, dedecms, wordpress, hkcms, yzncms, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部