<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • php數組追加元素(php數組最大長度)


    引言

    接著我們這個系列的文章說。本文我們聊一聊 PHP 數組,如何在任意位置插入新元素。因為內置函數并沒有提供類似 array_insert(&$array, $pos, $items) 的函數,所以我們試著動手解決。

    3分鐘短文 | PHP 數組任意位置插入新元素,你是怎么處理的?

    學習時間

    標準的實現方法,是要用 array_splice,該函數的用法:

    array array_splice( array &$input, int $offset[, int $length = 0[, mixed $replacement]] )

    把 input 數組中由 offset 和 length 指定的單元去掉,如果提供了 replacement 參數,則用其中的單元取代。

    下面是舉例說明:

    $original = array( 'a', 'b', 'c', 'd', 'e' );
    $inserted = array( 'x' ); // $inserted 并不必須是數組
    
    array_splice( $original, 3, 0, $inserted ); // 在索引 3 位置插入
    // $original 內容為 a b c x d e

    有幾個關鍵點大家需要注意,靈活運用 $offset, $length, $replacement 三個參數,可以組裝成強大的功能。

    對于偏移位置 $offset:

    • 如果 offset 為正,則從 input 數組中該值指定的偏移量開始移除。
    • 如果 offset 為負,則從 input 末尾倒數該值指定的偏移量開始移除。

    對于替換的長度 $length:

    • 如果省略 length,則移除數組中從 offset 到結尾的所有部分。
    • 如果指定了 length 并且為正值,則移除這么多單元。
    • 如果指定了 length并且為負值,則移除從 offset 到數組末尾倒數length 為止中間所有的單元。

    在編程中,當給出了replacement 時要移除從 offset 到數組末尾所有單元時,用 count($input) 作為 length。比如像下面這個示例:

    $input = array("red", "green", "blue", "yellow");
    array_splice($input, 1, count($input), "orange");
    // $input = array("red", "orange")

    特別需要注意的是 $replacement 參數:

    • 如果給出了 replacement 數組,則被移除的單元被此數組中的單元替代。
    • 如果 offset 和 length 的組合結果是不會移除任何值,則 replacement 數組中的單元將被插入到 offset 指定的位置。 注意替換數組中的鍵名不保留。
    • 如果用來替換 replacement 只有一個單元,那么不需要給它加上array(),除非該單元本身就是一個數組、一個對象或者 NULL。

    親手造輪子

    上一節的解決方案堪稱標準。有些同學還是要忍不住造輪子?!皸l條大道通羅馬”,肯定有不止一種方式實現需求。下面是另外一種方式:

    $a = array(1, 2, 3, 4);
    $b = array_merge(array_slice($a, 0, 2), array(5), array_slice($a, 2));
    // $b = array(1, 2, 5, 3, 4)

    使用 array_slice 函數對原數組切片,一分為二,然后使用 array_merge 拼接3個部分。完美!

    上面的代碼,在使用 array_merge 后悔丟失原數組的索引關系。如果要保留,使用 + 連接:

    $b = array_slice($a, 0, 2) + array(5) + array_slice($a, 2);

    這樣就可以了。

    換湯不換藥,如果給類添加一個方法,或者添加一個助手函數,自然是極好的。下面是封裝函數。

    function array_insert(&$array, $value, $index)
    {
        return $array = array_merge(array_splice($array, max(0, $index - 1)), array($value), $array);
    }

    寫在最后

    本文介紹了一個功能豐富的 array_splice 函數,讓大家領略了參數的靈活運用所帶來的便捷。如果你經常需要這樣的操作,麻溜地寫到全局助手函數里吧。

    Happy coding :_)

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费