最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

后端代碼規(guī)范避免數(shù)組下標(biāo)越界

 更新時間:2022年06月13日 15:22:43   作者:王中陽Go  
這篇文章主要為大家介紹了后端開發(fā)中的代碼如何規(guī)范避免數(shù)組下標(biāo)越界示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

拋出問題

數(shù)組下標(biāo)越界真的是開發(fā)過程中的痛,除了在開發(fā)過程中各種判斷是否設(shè)置,是否為空,還有其他優(yōu)雅的辦法解決嗎?

回答問題

肯定是有的

舉個栗子

比如,我有一個工具性質(zhì)的方法如下:

我怎么保證 $batchUserCover[$userid]['pickedFootprint'] 和 $batchFootprintList[$userid]['list'] 不會有下標(biāo)越界的問題呢?

    //批量獲得圖片故事 優(yōu)先精選故事 不足三個拼接最近發(fā)布的故事
    public static function batchImageFootprint($userIds, $batchUserCover, $batchFootprintList)
    {
        $ret = [];
        foreach ($userIds as $userid) {
            $ret[$userid] = array_slice(array_merge($batchUserCover[$userid]['pickedFootprint'], array_slice($batchFootprintList[$userid]['list'], 0, 3)), 0, 3);
        }
        return $ret;
    }

解題思路

1.在方法外判斷是否設(shè)置值

2.在方法外保證已經(jīng)設(shè)置值,確保 $batchUserCover[$userid]['pickedFootprint'] 這類參數(shù)一定是存在的,已經(jīng)設(shè)置了的.

我認為思路2更好

解題實踐

實踐1:

在傳入數(shù)據(jù)之前,設(shè)置好傳入值,保證傳入值的key必須存在,值可以為null,或者空數(shù)組。 核心代碼如下:

    public static function batchFormatCoverAndPickedFootprint($userListInfo)
    {
        foreach ($userListInfo as &$element) {
            $retData[$element['userid']] = [
                'pickedFootprint' => [],
                'coverFootprint' => [],
            ];
        }
        .
        .
        .
        return $retData;
    }

傳入的數(shù)組的key必然符合[$userid]['pickedFootprint'],不會存在數(shù)組下標(biāo)越界

    $batchUserCover = batchFormatCoverAndPickedFootprint(xxx);
    self::batchImageFootprint($userIds, $batchUserCover);

實踐2:

和實踐1的底層思路是一致的,區(qū)別在于實踐1是在函數(shù)內(nèi)首先定義了符合規(guī)范的初始值

實踐2是先處理業(yè)務(wù)邏輯,在return之前定義了符合規(guī)范的初始值

(下面代碼段寫了注釋,重點看后半部分;聯(lián)合查詢那部分代碼質(zhì)量也不錯,沒省略掉,看能不能拋轉(zhuǎn)引玉。)

    public static function batchFootprintList($userIds, $pageCount = 21, $batchPickedFootprints = [], $select = 'userid,id,mid,image,text,ST_Astext(picgeom) as "picgeom",poi,poiid,city,province,country,pictime')
    {
        .
        .
        .
        //聯(lián)合查詢
        $union = self::query()->selectRaw($select)->where('userid', $userIds[0])
            ->where('status', self::TYPE_STATUS_NORMAL)
            ->whereNotIn('mid', $batchPickedFootprints[$userIds[0]])
            ->orderBy('id', 'desc')
            ->limit($pageCount);
        //避免重復(fù)查詢第一條數(shù)據(jù)
        unset($userIds[0]);
        foreach ($userIds as $userId) {
            $unionItem = self::query()->selectRaw($select)->where('userid', $userId)
                ->where('status', self::TYPE_STATUS_NORMAL)
                ->whereNotIn('mid', $batchPickedFootprints[$userId])
                ->orderBy('id', 'desc')
                ->limit($pageCount);
            $union->unionAll($unionItem);
        }
        $allUserFootprints = $union->get()->toArray();
        $res = [];
        $chunkFootprintByUserid = self::_chunkFootprintByUserid($allUserFootprints);
        // 重點在這里
        foreach ($allUserIds as $userId) {
            $list = $chunkFootprintByUserid[$userId] ?? [];
            $count = count($list);
            //以此保證不會出現(xiàn)數(shù)據(jù)下標(biāo)越界的問題
            $res[$userId]['list'] = $list;
            $res[$userId]['more'] = $count < $pageCount ? 0 : 1;
            $res[$userId]['track'] = $count > 0 ? (string)$list[$count - 1]['id'] : '';
        }
        return $res;
    }

注意

為了行文緊湊,代碼段中省略了和文章無關(guān)的代碼,用豎著的三個.省略。

以上就是后端代碼規(guī)范避免數(shù)組下標(biāo)越界的詳細內(nèi)容,更多關(guān)于數(shù)組下標(biāo)越界的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • javascript避免數(shù)字計算精度誤差的方法詳解

    javascript避免數(shù)字計算精度誤差的方法詳解

    本篇文章主要是對javascript避免數(shù)字計算精度誤差的方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • tree?shaking功能及使用原理詳細解析

    tree?shaking功能及使用原理詳細解析

    這篇文章主要為大家介紹了tree?shaking功能及使用原理詳細解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪的相關(guān)資料
    2023-01-01
  • JavaScript實現(xiàn)動態(tài)表單生成

    JavaScript實現(xiàn)動態(tài)表單生成

    這篇文章主要來和大家一起深入探討如何使用JavaScript實現(xiàn)一個動態(tài)表單生成器,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2024-01-01
  • 小議Javascript中的this指針

    小議Javascript中的this指針

    在全局執(zhí)行環(huán)境中使用this,標(biāo)識Global對象,在瀏覽器中就是window對象。
    2010-03-03
  • jsonp原理及使用

    jsonp原理及使用

    jsonp 全稱是JSON with Padding,是為了解決跨域請求資源而產(chǎn)生的解決方案。下面讓我們了解一下是如何使用的吧。
    2013-10-10
  • 在網(wǎng)頁里看flash的trace數(shù)據(jù)的js類

    在網(wǎng)頁里看flash的trace數(shù)據(jù)的js類

    我的js類jdhcn.js中的一個flashDebug方法
    2009-01-01
  • 在JS方法中返回多個值的方法匯總

    在JS方法中返回多個值的方法匯總

    本文給大家匯總了在javascript方法中返回多個值的方法,都是在個人項目中檢驗過的,這里推薦給大家,有需要的小伙伴可以參考下。
    2015-05-05
  • JS時間控制實現(xiàn)動態(tài)效果的實例講解

    JS時間控制實現(xiàn)動態(tài)效果的實例講解

    下面小編就為大家?guī)硪黄狫S時間控制實現(xiàn)動態(tài)效果的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 微信小程序?qū)崿F(xiàn)橫向滾動條

    微信小程序?qū)崿F(xiàn)橫向滾動條

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)橫向滾動條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 前端JS獲取URL參數(shù)的4種方法總結(jié)

    前端JS獲取URL參數(shù)的4種方法總結(jié)

    通過url傳遞參數(shù)是我們在開發(fā)中經(jīng)常用到的一種傳參方法,下面這篇文章主要給大家介紹了關(guān)于前端JS獲取URL參數(shù)的4種方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論

雅江县| 任丘市| 策勒县| 汤阴县| 瓮安县| 通城县| 尉犁县| 封丘县| 扎囊县| 孝感市| 印江| 玉溪市| 麻城市| 青河县| 石狮市| 四会市| 沙湾县| 监利县| 桂林市| 通海县| 桂阳县| 新干县| 胶南市| 铜山县| 齐齐哈尔市| 门源| 永清县| 中超| 宣武区| 清镇市| 晴隆县| 丰镇市| 晴隆县| 敖汉旗| 花莲县| 桂平市| 广宁县| 库尔勒市| 香港 | 鹤山市| 威宁|