先上代碼
$suffix = 0; //使用者ID尾數$ids = [];$stores = [1,10,23,45,67,56,45,324,23]; //儲存使用者ID的數組$limit = 5;$count = count($stores);$i=0;do{ $id = $stores[array_rand($stores ,1)]; $sub = substr($id ,-1); if($sub==$suffix){ $ids[$id] = $id; } $i++;}while(count($ids)<$limit && $i<$count);print_r($ids);exit;
我想從$stores中擷取尾數為0的使用者ID,最多取5個,最少取1個,結果存到數組中,就有了上面的代碼
,但是我執行它,竟然會有$ids為空白的時候。。。搞不懂。。。
回複內容:
先上代碼
$suffix = 0; //使用者ID尾數$ids = [];$stores = [1,10,23,45,67,56,45,324,23]; //儲存使用者ID的數組$limit = 5;$count = count($stores);$i=0;do{ $id = $stores[array_rand($stores ,1)]; $sub = substr($id ,-1); if($sub==$suffix){ $ids[$id] = $id; } $i++;}while(count($ids)<$limit && $i<$count);print_r($ids);exit;
我想從$stores中擷取尾數為0的使用者ID,最多取5個,最少取1個,結果存到數組中,就有了上面的代碼
,但是我執行它,竟然會有$ids為空白的時候。。。搞不懂。。。
為什麼要用while而且迴圈到的資料還是隨機取數組的某個元素,不能使用foreach嗎?
結果不為空白的話試試這個
$suffix = 0; //使用者ID尾數 $ids = []; $stores = [1,10,23,45,67,56,45,324,23]; //儲存使用者ID的數組 $limit = 5; $count = count($stores); $i=0; do{ $id = $stores[array_rand($stores ,1)]; $sub = substr($id ,-1); if($sub==$suffix){ $ids[$id] = $id; } $i++; $iCount = count($ids); }while($iCount == 0 || ($count<$limit && $i<$count )); print_r($ids); exit;
不論運行多少次,array_rand($stores ,1) ,都有可能有數組元素永遠取不到。
$stores尾數是0的就只有10;
$count = count($stores);意味著最多do_while 10次。
10次都沒輪上那個10的話,最後就只能得到空數組了。
結果為空白:
[root@localhost www]# php test.phptest:1count($ids):0$i:1test:23count($ids):0$i:2test:23count($ids):0$i:3test:56count($ids):0$i:4test:45count($ids):0$i:5test:67count($ids):0$i:6test:324count($ids):0$i:7test:67count($ids):0$i:8test:67count($ids):0$i:9Array()
結果不為空白:
[root@localhost www]# php test.phptest:324count($ids):0$i:1test:10got:10count($ids):1$i:2test:23count($ids):1$i:3test:10got:10count($ids):1$i:4test:67count($ids):1$i:5test:324count($ids):1$i:6test:45count($ids):1$i:7test:45count($ids):1$i:8test:1count($ids):1$i:9Array( [10] => 10)