Let's not just rush to the "just do this" answer. Here is what you tried:
Code: (Demo)
$array=[0=>'',1=>'type',3=>'gear',4=>' ',5=>'rarity'];
foreach($array as $key=>$value){
if ($value == ' ' || $value=='' || $value==' ' || empty($value)) { unset($array[$key]); }
echo 'key:'.$key.' value:'.$value."\n";
}
foreach($array as $key=>$value){
if ($value == ' ' || $value=='' || $value==' ' || empty($value)) { unset($array[$key]); }
echo 'key:'.$key.' value:'.$value."\n";
}
It is doing what you asked it to do. The first loop unsets the unwanted elements AND prints the keys & values assigned to the "copy" of $array that foreach() "writes" & iterates. The second loop writes & iterates a new "copy" of $array (which was previously modified by the first loop) and you can see that the empty-ish elements are now gone.
Output:
key:0 value: # unset $array[$key] and display $value (these are different entities
key:1 value:type
key:3 value:gear
key:4 value:
key:5 value:rarity
key:1 value:type # you see elements [0] and [4] are removed as intended
key:3 value:gear
key:5 value:rarity
Now, for the "Do this" part... You have several options. Here are a few:
Code: (Demo)
$array=[0=>'',1=>'type',3=>'gear',4=>' ',5=>'rarity'];
var_export(array_filter($array,function($v){return strlen(trim($v));})); // professional grade: uses the function specifically designed to perform this function and the process will be instantly understood by future devs that read your code
var_export(preg_grep('/\S/',$array)); // A regular expression filter. Regex solutions should only be used when other methods will not suffice. For this reason, this method is ill-advised
var_export(preg_grep('/^\s*$/',$array,PREG_GREP_INVERT)); // A regular expression filter (inverted pattern filteration). Regex solutions should only be used when other methods will not suffice. For this reason, this method is ill-advised
foreach($array as $k=>$v){ // possibly the fastest method, I didn't test, but it is also the most verbose and less descriptive as a technique
if(!strlen(trim($v))){unset($array[$k]);}
}
var_export($array);
Output:
array (
1 => 'type',
3 => 'gear',
5 => 'rarity',
)array (
1 => 'type',
3 => 'gear',
5 => 'rarity',
)array (
1 => 'type',
3 => 'gear',
5 => 'rarity',
)array (
1 => 'type',
3 => 'gear',
5 => 'rarity',
)
Now the most important piece of advice to give you from the manual:
Returns FALSE if var exists and has a non-empty, non-zero value.
Otherwise returns TRUE.
The following things are considered to be empty:
- "" (an empty string)
- 0 (0 as an integer)
- 0.0 (0 as a float)
- "0" (0 as a string)
- NULL
- FALSE
- array()
- (an empty array)
- $var; (a variable declared, but without a value)
This "greedy" default behavior is used by empty() and array_filter() and can really throw a wrench into your task if you are unaware. This is why in my suggested methods, I write a custom filter condition and in the foreach loop, I replace empty() with a strlen() call.
array_filter?