• 技术文章 >后端开发 >php教程

    浅谈PHP源码十四: 关于array_combine函数

    不言不言2018-06-28 17:25:07原创782
    这篇文章主要介绍了关于浅谈PHP源码十四: 关于array_combine函数,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

    浅谈PHP源码十四: 关于array_combine函数

    array_combine

    (PHP 5)
    array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
    说明

    array array_combine ( array keys, array values )

    返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。
    如果两个数组的单元数不同或者数组为空时返回 FALSE。

    程序实现说明:

     array_init(return_value); 
     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(keys), &pos_keys);
     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(values), &pos_values);    //    初始化数组指针,将其置为双向链接的头指针
     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(keys), (void **)&entry_keys, &pos_keys) == SUCCESS &&
       zend_hash_get_current_data_ex(Z_ARRVAL_P(values), (void **)&entry_values, &pos_values) == SUCCESS) {    //    同时遍历两个数组
      if (Z_TYPE_PP(entry_keys) == IS_STRING) {    //    如果key值为字符串,以key
       zval_add_ref(entry_values);
       add_assoc_zval_ex(return_value, Z_STRVAL_PP(entry_keys), Z_STRLEN_PP(entry_keys)+1, *entry_values);
      } else if (Z_TYPE_PP(entry_keys) == IS_LONG) {
       zval_add_ref(entry_values);
       add_index_zval(return_value, Z_LVAL_PP(entry_keys), *entry_values);
      } else {
       zval key;
       key = **entry_keys;
       zval_copy_ctor(&key);
       convert_to_string(&key);    //    转化为字符串,如果为数组,则为Array
       zval_add_ref(entry_values);
       add_assoc_zval_ex(return_value, Z_STRVAL(key), Z_STRLEN(key)+1, *entry_values);
       zval_dtor(&key);
      }
      zend_hash_move_forward_ex(Z_ARRVAL_P(keys), &pos_keys);
      zend_hash_move_forward_ex(Z_ARRVAL_P(values), &pos_values);    //    下一个元素,其实现为:pos_values = pos_values->pListNext;  }

    在PHP代码中如果key数组中包含两个数组,则后面一个会覆盖前面,即最终只有一个元素,

    如下所示PHP代码:

      \<?PHP$arr1 = array(1, array(1, 2), array(3, 4), array(5, 6));$arr2 = array(33, 44, 55, 66);$arr3 = array_combine($arr1, $arr2);print_r($arr3);die();

    此代码会输出:

    Array ( [1] => 33 [Array] => 66 )

    EOF

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

    相关推荐:

    浅谈PHP源码十三:关于array_change_key_case,array_chunk的介绍

    浅谈PHP源码十二:关于return_value 返回值

    浅谈PHP源码十一:关于 array_key_exists,in_array的介绍

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:浅谈PHP源码十三:关于array_change_key_case,array_chunk的介绍 下一篇:详解PHP中mb_strpos的使用php技巧
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 教你创建虚拟主机并运行php项目(phpstudy + wamp)• 一文详细PHP模板引擎的原理(附代码示例)• 2022最新浅析PHP特性、内核及架构• PHP设计模式漫谈之迭代器模式(2)_PHP教程• PHP二维数组排序的具体方法介绍_PHP教程
    1/1

    PHP中文网