589 Stimmen

Wie überprüft man, ob ein Array in PHP leer ist?

players wird entweder leer sein oder eine durch Kommas getrennte Liste (oder ein einzelner Wert). Wie kann man am einfachsten überprüfen, ob es leer ist? Ich nehme an, dass ich dies sofort tun kann, sobald ich das $gameresult-Array in $gamerow abrufe? In diesem Fall wäre es wahrscheinlich effizienter, das Aufteilen des $playerlist zu überspringen, wenn es leer ist, aber um des Arguments willen, wie würde ich auch überprüfen, ob ein Array leer ist?

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

1voto

rabudde Punkte 7205

Viele Optionen wurden bereits diskutiert, um zu überprüfen, ob ein Array leer ist oder keinen Wert enthält, wie zum Beispiel

if ($playerlist) {}

if (!empty($playerlist)) {}

if (count($playerlist) > 0) {}

Jeder hat seine Vor- und Nachteile.

Aber es gibt eine weitere Option, die möglicherweise sinnvoll ist, wenn Sie sicher sind, dass Ihr Array nur numerische Schlüssel ab null hat (dies passiert z.B. wenn Sie einen String mit explode()):

if (isset($playerlist[0])) {
  // etwas machen
}

Dies ist sogar etwas schneller als die anderen Lösungen.

0voto

Array_filter rekursiv und count

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

0 Stimmen

Es erstaunt mich, dass eine Antwort auf diese Frage seit über einem Jahrzehnt akzeptiert wurde und immer noch neue Antworten erhält.

-1voto

Suraj Kumar Punkte 75

Ich habe dieses Problem mit folgendem Code gelöst.

$catArray=array();                          

$catIds=explode(',',$member['cat_id']);
if(!empty($catIds[0])){
foreach($catIds as $cat_id){
$catDetail=$this->Front_Category->get_category_detail($cat_id);
$catArray[]=$catDetail['allData']['cat_title'];
}
echo implode(',',$catArray);
}

1 Stimmen

Willkommen bei Stack Overflow! Vielen Dank für den Code-Schnipsel, der möglicherweise etwas begrenzte, sofortige Hilfe bietet. Eine ordentliche Erklärung würde seinen Langzeitwert erheblich verbessern, indem beschrieben wird, warum dies eine gute Lösung für das Problem ist, und würde es für zukünftige Leser mit ähnlichen Fragen nützlicher machen. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, einschließlich der Annahmen, die Sie getroffen haben.

-3voto

Madhu Nair Punkte 430

Dies scheint für alle Fälle zu funktionieren

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

3 Stimmen

Dies hat zu viel Overhead. Diese Lösung sollte von keinem Entwickler aus irgendeinem Grund implementiert werden.

0 Stimmen

@mickmackusa Toller Punkt, aber wie lernt ein Anfänger, zu identifizieren, welche Operationen zu viel Overhead darstellen? Was ist das Erkennungsmerkmal oder welche sind die Kriterien für zu viel Overhead ohne Leistungstests durchzuführen?

1 Stimmen

@ptr Jeder Funktionsaufruf hat einen "Kosten". Wenn eine Aufgabe ohne Funktionsaufruf erledigt werden kann, wird sie eine Technik, die einen Funktionsaufruf verwendet, übertreffen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X