php數組重建索引,php定義索引數組

本文目錄一覽:

PHP 數組的底層實現

PHP 數組的底層主要是通過 HashTable 實現,HashTable 通過映射函數或者散列函數將 String Key 轉換成一個普通的數字下標,然後再將 Value 值存儲到下標對應的數組元素中

HashTable 主要包含兩部分:1.存儲元素的數組 2.散列函數或者映射函數

隨機訪問

如果我們指定一個 Key=Value 的映射關係,Key 是一個 String 類型的,則先通過 Time 33 算法將 String 轉換成一個 Int 整型,然後再通過 PHP 裡面特定的散列算法映射成 Bucket 數組中的一個下標,將 Value 值存儲到對應的下標元素中,當我們通過 Key 訪問數組元素時,只需要再通過相同的算法計算出對應的 Key,就能實現隨機訪問數組元素

順序訪問

存儲在 HashTable 中的數組是無序的,但是 PHP 中的數組是有序的,為了實現 HashTable 的有序性,PHP 引入了一個中間映射表,該表是一個大小和 Bucket 數組相同的數組,數組中存放的是整形數據,主要用於存放元素實際存儲的 Value 的下標值,當引入中間映射表之後,Bucket 中的數據是有序的,而中間映射表中的數據是無序的,當我們順序訪問的時候只需要遍歷 Bucket 中的數據即可

Hash 衝突

PHP 解決 Hash 衝突採用的是鏈地址法,將出現衝突的 Bucket 串成鏈表,這樣通過中間映射表映射出來的就不再是一個元素而是一個鏈表,通過散列函數定位到對應的 Bucket 鏈表時,需要遍歷鏈表,逐個對比 key 值,直至找出對應的目標值

PHP 實現擴容

1.當刪除的元素所佔比例超出閾值的時候,則需要移除已經被邏輯刪除的 Bucket,將後面的 Bucket 補位到前面,因為 Bucket 的下標發生了變動,所以需要更新每元素在中間映射表中實際存儲的下標值

2.當沒有超出閾值的時候,PHP 會申請一個大小是原來兩倍的新數組,並將舊數組中的數據複製到新數組中,因為數組長度發生了變化,所以 key-value 的映射關係需要重新計算,這個就是重建索引

php怎麼把關聯數組轉成索引數組?

PHP和PERL、VB不同,其只有“數組”,沒有單獨的“關聯數組”類型,實際上PHP的所有數組都是關聯數組,當沒有指定鍵值的時候,鍵值為0、1、2??

php中定義數組的方法:

PHP定義數組的格式

數組名=array();

如:$aa=array();//這樣就定義了一個數組,

之後給元素賦值:

$aa[0]=”9016″;

$aa[1]=”9017″;

$aa[2]=”9018″;

PHP輸出數組的方法:

foreach($aa as $val)

{echo$val;}

也可以在定義數組時直接賦值

$aa=array(0=”9016″,1=”9017″;2=”9018″);

PHP的數組還可以用字符做下標,不一定要數字.

$aa[“name”]=”Joan”;

$aa[“num”]=”9018″;

$aa[“email”]=”abc@abc.com”;

也可以這樣

$aa=array(“name”=”joan”,”num”=”9018″,”email”=”abc@abc.com”);

將一個一維數組的元素也定義為數組,就是一個二維數組,

$aa=array(0=”a1″,1=”a2″);

$bb=array(0=”b1″,1=”b2″);

$cc=array(0=$aa;1=$bb);此時,$cc[0]也是一個數組,$cc[1]也是一個數組,$cc就是一個二維數組。

同理,三維,四維數組也可以繼續定義下去。

數組的元素不僅於數字和字符串,可以是類的對象。

PHP重置索引

為什麼$array = array_values($array);後再打印出來的索引就是從0開始的

array_values()不是獲取數組的值嗎 跟重置索引有什麼關係

===================

是獲取數組的值,而且拋棄原數組的索引,重建一個數組.所以相當於重置索引.

php刪除數組指定元素並重建索引

mongodb中使用aggregate可以返回數組字段數組的指定索引的元素

參考語句:

{$match:{‘duid’:15}},

{$project:{duid:1,”default”:1}},

{$unwind:”$default.styles”},

{$match:{‘default.styles.status’:1}},

{$group:{_id:”$_id”,”defaults”:{$push:”$default.styles”}}}

解釋:

1:過濾數據{$match:{‘duid’:15}}

2:獲取想要的列{$project:{duid:1,”default”:1}}

3:獲取展開後數組字段{$unwind:”$default.styles”}

4:條件查詢數組元素{$match:{‘default.styles.status’:1}}

5:分組後保存結果{$group:{_id:”$_id”,”defaults”:{$push:”$default.styles”}}}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/237920.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:08
下一篇 2024-12-12 12:08

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python基本索引用法介紹

    Python基本索引是指通過下標來獲取列表、元組、字符串等數據類型中的元素。下面將從多個方面對Python基本索引進行詳細的闡述。 一、列表(List)的基本索引 列表是Pytho…

    編程 2025-04-29
  • Python中的隊列定義

    本篇文章旨在深入闡述Python中隊列的定義及其應用,包括隊列的定義、隊列的類型、隊列的操作以及隊列的應用。同時,我們也會為您提供Python代碼示例。 一、隊列的定義 隊列是一種…

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變量、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29

發表回復

登錄後才能評論