玩家要么是空的,要么是逗号分隔的列表(或者是单个值)。检查它是否为空的最简单的方法是什么?我假设我可以这样做,只要我取回$gameresult数组到$gamerow?在这种情况下,如果$playerlist是空的,跳过爆炸可能会更有效,但为了讨论,我如何检查数组是否为空?

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);

当前回答

如果你只需要检查数组中是否有任何元素,你可以使用数组本身,因为PHP的松散类型,或者-如果你喜欢更严格的方法-使用count():

if (!$playerlist) {
     // list is empty.
}
if (count($playerlist) === 0) {
     // list is empty.
}

如果你需要在检查之前清理空值(通常是为了防止奇怪的字符串爆炸):

foreach ($playerlist as $key => $value) {
    if (!strlen($value)) {
       unset($playerlist[$key]);
    }
}
if (!$playerlist) {
   //empty array
}

其他回答

这似乎适用于所有情况

if(!empty(sizeof($array)))

Array_filter递归和计数

function array_filter_recursive(array $arr) 
  { 
    array_walk($arr,function(&$item){if (is_array($item))  { $item = array_filter_recursive($item);}});
    return array_filter($arr); 
  } 
   
  function is_empty_array(array $arr):bool{
    return count(array_filter_recursive($arr)) == 0;
  }

test

$c=['b'=>2,'c'=>3];
$a=[];
$b=[[]];
$d=['a'=>[]];
$e=['a'=>[],[]];
$f=['a'=>[[],[],[]],[]];
$g=[[[],[[],[[],[[],[]]]]],[]];
$i=[[[],[[],[[],[[],['s'=>1]]]]],[]];
var_dump(is_empty_array($c));//false
var_dump(is_empty_array($a));//true
var_dump(is_empty_array($b));//true
var_dump(is_empty_array($d));//true
var_dump(is_empty_array($e));//true
var_dump(is_empty_array($f));//true
var_dump(is_empty_array($g));//true
var_dump(is_empty_array($i));//false

你可以使用array_filter(),它适用于所有情况:

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
    echo 'array is empty';
} else {
    echo 'array is not empty';
}

如果你想排除假行或空行(例如0 => "),在使用empty()将失败的情况下,你可以尝试:

if (array_filter($playerlist) == []) {
  // Array is empty!
}

array_filter():如果没有提供回调,数组中所有等于FALSE的条目(参见转换为布尔值)将被删除。

如果你想删除所有NULL, FALSE和空字符串("),但保留零值(0),你可以使用strlen作为回调,例如:

$is_empty = array_filter($playerlist, 'strlen') == [];
 $gamerow = mysql_fetch_array($gameresult);

if (!empty(($gamerow['players'])) {
   $playerlist = explode(",", $gamerow['players']);
}else{
 
  // do stuff if array is empty
}