鍍金池/ 問答/PHP/ 在PHP中foreach 語句可以同時用return 和 break么?

在PHP中foreach 語句可以同時用return 和 break么?

在PHP中foreach 語句可以同時用return 和 break么?

例如:
$arr = array(

    '1' => array('name' => 'zhangsan','age' => 20,'sex' => 1),
    '2' => array('name' => 'lisi','age' => 30,'sex' => 0),
    '3' => array('name' => 'wangwu','age' => 25,'sex' => 0),
    '4' => array('name' => 'liuliu','age' => 40,'sex' => 1)

);
shuffle($arr); //我想隨機返回一女人的姓名和年齡(男:sex->1;女:sex->0)
foreach ($arr as $key => $value) {

if($value['sex'] == 1){
    //此處return回數(shù)據(jù)
    result[
        'name' => $value['name'],
        'age' => $value['age']
    ];
    //如果我想在返回數(shù)據(jù)之后立即讓循環(huán)終止還需要break嗎?
    break;
}

}

回答
編輯回答
夏木

不需要 你return 之后 整個 foreach 就停止 執(zhí)行了

2017年12月24日 08:14
編輯回答
獨白

不需要,首先,foreach和for是差不多的,只不過foreach專門針對對象和數(shù)組的循環(huán),對于for循環(huán)用的地方可能更多。
那么,根據(jù)以上的原理可知:

foreach就是一個普通的循環(huán);

對于循環(huán)語句,用return還是break都具有終止循環(huán)的作用。

但是:

return終止循環(huán)的同時同時會終止return所在的方法或者函數(shù)的執(zhí)行,而break只是終止了當(dāng)前整個for循環(huán)的執(zhí)行,當(dāng)前方法或者函數(shù)還是會繼續(xù)執(zhí)行的。

就是這么個區(qū)別。

而在你這程序里面來看,在for循環(huán)里面,break后的return是沒有用的,因為break就直接跳出循環(huán)了,下面的程序不執(zhí)行,也就是根本到不了return。那么反過來看先寫return在寫break,是同樣的道理。

但是這兩個帶來的區(qū)別就是我上面說的,假設(shè)你foreach接下來還要執(zhí)行些什么程序,你在for中用了return,那么foreach后面的程序就不執(zhí)行了,而你用了break,foreach執(zhí)行后繼續(xù)可以執(zhí)行自己想要執(zhí)行的邏輯。

所以,依照此種邏輯,你可以干很多事情了。

2018年6月1日 03:36
編輯回答
熟稔

其實循環(huán)里面使用return是一種很不好的編碼習(xí)慣,可讀性和可維護性太差!建議在循環(huán)外層定義一個是否需要終止程序執(zhí)行的標(biāo)識變量,當(dāng)需要返回的時候,賦值變量,并break,然后在循環(huán)外層,判斷標(biāo)識,確定是需要return還是繼續(xù)執(zhí)行!
另外講一個開發(fā)中踩過的坑,就是在事務(wù)里面剛好有一個foreach,就有人在foreach里面直接return,由于代碼跑在cli模式下,數(shù)據(jù)庫由于事務(wù)沒有解鎖,直接鎖死了。
其實只要稍微規(guī)范一下代碼,這個坑都是不用踩的!

2018年6月17日 19:36
編輯回答
墨沫

可以是都可以。只是
return的話,整個函數(shù)就停止繼續(xù)執(zhí)行了,返回了
break只是跳出循環(huán)

2018年5月29日 03:11