首頁  >  文章  >  後端開發  >  淺談PHP源碼十四: 關於array_combine函數

淺談PHP源碼十四: 關於array_combine函數

不言
不言原創
2018-06-28 17:25:071482瀏覽

這篇文章主要介紹了關於淺談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