目次
[PHP源码阅读]array_push和array_unshift函数,arrayunshift
array_push
运行示例
运行步骤
源码解读
ホームページ php教程 php手册 [PHP源码阅读]array_push和array_unshift函数,arrayunshift

[PHP源码阅读]array_push和array_unshift函数,arrayunshift

Jun 13, 2016 am 08:39 AM
shift

[PHP源码阅读]array_push和array_unshift函数,arrayunshift

在PHP中,在数组中添加元素也是一种很常用的操作,分别有在数组尾部和头部添加元素,看看PHP内部是如何实现数组插入的操作。

我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

 

array_push

<p>int array_push ( array &$array , mixed $value1 [ , mixed $... ] )</p>
ログイン後にコピー

array_push函数将array参数看做一个栈,将传递进来的变量压倒array的尾部。array的长度随着被压进去的变量个数增加。下面的代码有意义的效果:

$array[] = $var;

如果只需要添加一个元素到数组,使用$array[] 这种方式更好,因为这样做不用调用函数。

运行示例

<span>$arr</span> = <span>array</span><span>();
</span><span>array_push</span>(<span>$arr</span>, 1, 2, 3); <span>//</span><span> return 3; $arr = [1, 2, 3]</span>
ログイン後にコピー

运行步骤

array_push函数相对比较简单,就相当于压栈操作,把array看做一个栈,然后对每一个参数,让其变成引用,引用数加一,然后添加它到数组的尾部。

内部实现的流程图如下:

$arr = array(1, 2, 3); array_unshift($arr, 4, 5, 6); // 4 5 6 1 2 3

运行步骤

<p>1、调用php_splice将数据元素插入到数组头部,用新的哈希表替换就得哈希表并将其销毁</p>
<p>2、如果操作后的stack等于运行时的符号表,则重置哈希表的内部指针</p>
<p>3、stack指向新的哈希表,释放新的哈希表红箭,销毁就得哈希表</p>
ログイン後にコピー

源码解读

由上面的步骤可知,array_unshift的核心步骤是php_splice函数。对于array_unshift函数,php_splice实现时新建一个哈希表out_hash,将需要插入的list数据先插入到out_hash中,然后再把原来的数组数据写入到out_hash中,这样实现在数组前面插入数据元素的功能。

实现的效果图如下:


这次阅读源码过程中,同时也研究了PHP中的哈希表数据结构及一些API,也给自己补充了一些哈希表的知识。学习到了PHP底层是使用双向链表做哈希冲突的处理,获益匪浅。日后再做关于PHP数据结构的分享。

 

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

如果本文对你有帮助,请点下推荐吧,谢谢^_^

 

最后再安利一下,我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

更多源码文章,欢迎访问个人主页继续查看:hoohack

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

シフトを押しても中国語と英語を切り替えることができない場合はどうすればよいですか? シフトを押しても中国語と英語を切り替えることができない場合はどうすればよいですか? Feb 22, 2023 pm 04:13 PM

Shift キーを押しても中国語と英語を切り替えることができない問題の解決策: 1. Win キーを見つけてクリックして開きます; 2. 「設定」を見つけてクリックして開き、次に「時刻と言語」を開きます; 3. 「地域と言語」をクリックします。 「言語」を選択し、「オプション」を開きます。 4.「オプション」をクリックし、最初の行で「シフト」を選択します。

Ctrl+Shiftとは何ですか? Ctrl+Shiftとは何ですか? Mar 09, 2023 pm 04:23 PM

ctrl+shift は入力方法を切り替えるためのショートカット キーの組み合わせです。「ctrl+shift」を同時に押すと、「ctrl+shift+N」を同時に押すなど、他のキーを押したまま他の機能を実行することもできます。新しいフォルダーを作成するときのタイムキーなど。

Win10キーボードのシフトロックを解除する方法 Win10キーボードのシフトロックを解除する方法 Mar 31, 2024 am 11:51 AM

最近、一部の友人が、どこを押したらよいか分からず、キーボードの Shift キーがロックされてしまうと報告しています。何が起こっているのでしょうか?この状況を解決するにはどうすればよいですか?ここでは、Win10 について詳しく説明します。キーボードのシフトロックを解除する方法を見てみましょう。元に戻す方法: 1. 左下のタスクバーの「スタート」をクリックし、メニューリストの「設定」を選択します。 2. 新しいインターフェースに入ったら、「時刻と言語」オプションをクリックします。 3. 次に、左側の列の「地域と言語」をクリックし、右側の「関連設定」の「キーボードの詳細設定」をクリックします。 4. 次に、「言語バーのオプション」をクリックします。 5. 開いたウィンドウで、上部にある「詳細キー設定」タブをクリックします。 6. 最後に

MacのShiftキーとは何ですか MacのShiftキーとは何ですか Mar 13, 2023 pm 02:20 PM

Mac の Shift キーは、fn キーの上、Caps Lock キーの下のキーです。このキーはキーボードの一番左側、右下から 2 番目のキーです。Shift キーはキーボードの上シフト キーです。 「Ctrl+Shift」キーの組み合わせでアクセスして、入力方法を切り替えることができます。

どのキーボードがシフトですか? どのキーボードがシフトですか? Feb 22, 2023 pm 02:51 PM

Shift はキーボードのシフト キーで、キーボード シフト キーとも呼ばれ、キーボードの左下隅にあり、入力方法の切り替え、半角と全角の素早い切り替え、連続入力の選択などの機能があります。ファイルを削除したり、ファイルを直接削除したりできます。

win11 でセーフ モードに入るショートカット キーを設定するにはどうすればよいですか? デスクトップ上で Shift キーを押しながら右クリックしてセーフ モードに入る win11 でセーフ モードに入るショートカット キーを設定するにはどうすればよいですか? デスクトップ上で Shift キーを押しながら右クリックしてセーフ モードに入る Apr 11, 2024 pm 06:22 PM

この記事では、デスクトップ上でショートカット キー Shift+右クリックを使用して、Win11 システムでセーフ モードに簡単に入る方法を紹介します。セーフ モードは、コンピュータの問題を診断して解決するために使用される特別な起動モードで、システムに障害が発生したり、正常に起動できなくなったりした場合にシステムを修復する方法を提供します。この記事のガイダンスを通じて、読者は、このショートカットを使用して Win11 でセーフ モードにすばやく入り、コンピューター システムの保守と修復を適切に行う方法を学ぶことができます。 1. デスクトップ上の空白スペースで [右クリック] をクリックし、表示されるメニュー項目で [新規 - テキスト ドキュメント] を選択します; 2. 新しいテキスト ドキュメント ウィンドウを作成し、次のコードを入力します: WindowsRegistryEditorVersion5.00[ HKEY_CL

シフトバックドアの使い方 シフトバックドアの使い方 Nov 21, 2023 am 11:10 AM

「シフト バックドア」攻撃からコンピュータを保護するには、システムの更新、強力なパスワードと多要素認証の使用、セキュリティ教育、ファイアウォールとセキュリティ ソフトウェア、データの定期的なバックアップ、ネットワーク セキュリティの監査と監視、セキュリティ ポリシーなどのセキュリティ対策を組み合わせる必要があります。そして権限管理。これらの対策により、システムの「シフト バックドア」攻撃のリスクを大幅に軽減し、コンピュータ システムのセキュリティを確保できます。

Win11 Build 23419 プレビュー バージョンには新機能が導入されています: Win + Shift + R ショートカット キーで画面録画を完了できるようになりました Win11 Build 23419 プレビュー バージョンには新機能が導入されています: Win + Shift + R ショートカット キーで画面録画を完了できるようになりました Dec 21, 2023 pm 05:08 PM

Microsoft は本日、WindowsInsider プロジェクト メンバー向けに Win11Build23419 プレビュー アップデートを Dev チャネルでリリースしました。このアップデートでは、新しい USB4 設定ページなどの多くの改善に加え、Microsoft によって導入されたいくつかの新機能がアップデート ログに書き込まれていません。 Microsoft は、Win11 に新しい機能を導入しようとしています。ユーザーは、Win+Shift+R ショートカットの組み合わせを使用して画面を記録できます。ただし、この機能はまだ有効ではなく、このキーボード ショートカットを使用すると、画面録画 UI の代わりに通常のスクリーンショット UI が開きます。ネットユーザーは、ViveTool ツールを通じて上記の新しい機能を有効にすることができます。 1. GitHub ページから Vivetool ツールをダウンロードし、

See all articles