[PHP源码阅读]array_push和array_unshift函数,arrayunshift
[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

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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