<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # array_reduce **這個php的內置函數非常重要,laravel用這個函數完成,管道和中間件的執行** 在看array_reduce在laravel中的應用時,先來看看array_reduce官方文檔是怎么說的。 array_reduce() 將回調函數 callback 迭代地作用到 array 數組中的每一個單元中,從而將數組簡化為單一的值。 ~~~ mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] ) ~~~ 1. array > 輸入的 array。 2. callback > mixed callback ( mixed $carry , mixed $item ) > $carry包括上次迭代的值,如果本次迭代是第一次,那么這個值是 initial,item 攜帶了本次迭代的值 3. initial > 如果指定了可選參數 initial,該參數將在處理開始前使用,或者當處理結束,數組為空時的最后一個結果。 從文檔說明可以看出,array_reduce函數是把數組的每一項,都通過給定的callback函數,來簡化的。 那我們就來看看是怎么簡化的。 ~~~ $arr = ['AAAA', 'BBBB', 'CCCC']; $res = array_reduce($arr, function($carry, $item){ return $carry . $item; }); ~~~ 給定的數組長度為3,故總迭代三次。 1. 第一次迭代時 $carry = null $item = AAAA 返回AAAA 2. 第一次迭代時 $carry = AAAA $item = BBBB 返回AAAABBBB 3. 第一次迭代時 $carry = AAAABBBB $item = CCCC 返回AAAABBBBCCCC > 這種方式將數組簡化為一串字符串AAAABBBBCCCC # 帶初始值的情況 ~~~ $arr = ['AAAA', 'BBBB', 'CCCC']; $res = array_reduce($arr, function($carry, $item){ return $carry . $item; }, 'INITIAL-'); ~~~ 1. 第一次迭代時($carry = INITIAL-),($item = AAAA) 返回INITIAL-AAAA 2. 第一次迭代時($carry = INITIAL-AAAA),($item = BBBB), 返回INITIAL-AAAABBBB 3. 第一次迭代時($carry = INITIAL-AAAABBBB),($item = CCCC),返回INITIAL-AAAABBBBCCCC > 這種方式將數組簡化為一串字符串INITIAL-AAAABBBBCCCC # 閉包 ~~~ $arr = ['AAAA', 'BBBB', 'CCCC']; //沒帶初始值 $res = array_reduce($arr, function($carry, $item){ return function() use ($item){//這里只use了item return strtolower($item) . '-'; }; }); ~~~ 1. 第一次迭代時,$carry:null,$item = AAAA,返回一個use了$item = AAAA的閉包 2. 第二次迭代時,$carry:use了$item = AAAA的閉包,$item = BBBB,返回一個use了$item = BBBB的閉包 3. 第一次迭代時,$carry:use了$item = BBBB的閉包,$item = CCCC,返回一個use了$item = CCCC的閉包 > 這種方式將數組簡化為一個閉包,即最后返回的閉包,當我們執行這個閉包時$res()得到返回值CCCC- 上面這種方式只use ($item),每次迭代返回的閉包在下次迭代時,我們都沒有用起來。只是又重新返回了一個use了當前item值的閉包。 # 閉包USE閉包 ~~~ $arr = ['AAAA']; $res = array_reduce($arr, function($carry, $item){ return function () use ($carry, $item) { if (is_null($carry)) { return 'Carry IS NULL' . $item; } }; }); ~~~ > 注意,此時的數組長度為1,并且沒有指定初始值 由于數組長度為1,故只迭代一次,返回一個閉包 use($carry = null, $item = 'AAAA'),當我們執行($res())這個閉包時,得到的結果為Carry IS NULLAAAA。 接下來我們重新改造下, ~~~ $arr = ['AAAA', 'BBBB']; $res = array_reduce($arr, function($carry, $item){ return function () use ($carry, $item) { if (is_null($carry)) { return 'Carry IS NULL' . $item; } if ($carry instanceof \Closure) { return $carry() . $item; } }; }); ~~~ > 我們新增了一個條件判斷,若當前迭代的值是一個閉包,返回該閉包的執行結果。 第一次迭代時,$carry的值為null,$item的值為AAAA,返回一個閉包, ~~~ //偽代碼 function () use ($carry = null, $item = AAAA) { if (is_null($carry)) { return 'Carry IS NULL' . $item; } if ($carry instanceof \Closure) { return $carry() . $item; } } ~~~ 假設我們直接執行該閉包,將會返回Carry IS NULLAAAA的結果。 第二次迭代時,$carry的值為上述返回的閉包(偽代碼),$item的值為BBBB,返回一個閉包, > 當我們執行這個閉包時,滿足$carry instanceof \Closure,得到結果Carry IS NULLAAAABBBB。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看