Hm, du kan inte köra såhär då?
if(empty($arr)) {
// gör saker
}
Eller om du vill komma att $arr innehållet något värde kan du ta en titt på funktionen in_array().
23 svar · 756 visningar · startad av Bjuufaren
Hej, det här är säkert jättelätt men jag har kollat runt i manualen utan att hitta något..
// dessa sätts i if-satser, de får ett värde eller så blir de "tomma"
$arr['key1'] = "value1";
$arr['key2'] = "";
// det här if-villkoret borde gå att förenkla
if ($arr['key1'] == "" && $arr['key2'] == "")
{
// gör saker
}
Problemet är alltså att min $arr kan bli ganska stor, vilket gör villkoret i if-satsen kan bli gigantiskt långt.
Hm, du kan inte köra såhär då?
if(empty($arr)) {
// gör saker
}
Eller om du vill komma att $arr innehållet något värde kan du ta en titt på funktionen in_array().
empty fungerar tyvärr inte (skulle fungera om jag aldrig sätter $arr[$key] == "")
in_array fungerar tyvärr inte heller riktigt.
Jo men du vill ju kolla att alla $arr är tomma, och om så är fallet ska villkoret uppfyllas.
Eller?
$arr['key1'] = '';
$arr['key2'] = '';
print empty($arr);
..ger ingen utskrift.
Med in_array kan jag kolla om "" finns i arrayen, visst, men jag vill kolla om alla värden är "" (eller om något värde != "").
Uhm, eftersom du definerar att $arr ska ha ett värde (även '' är ett värde) så funkar inte empty.
Testa istället något åt det här hållet:
if(strlen($arr) >= 1) {
// gör något
}
Har ingen möjlighet att testa, sitter på jobbet.
Men hur blir resultatet om du kör...?
if(!isset($arr)) {
// gör något
}
strlen fungerar inte heller.. Kom på den här.. inte direkt självförklarande kod, men bästa lösningen ändå?
rsort($arr);
if (!$arr[0])
{
//gör saker
}
Bjuufaren skrev:
strlen fungerar inte heller.. Kom på den här, kanske bästa lösningen då?
rsort($arr); if (!$arr[0]) { //gör saker }
Jao, testa om min uppdatering funkar, annars funkar din lösning utmärkt. :)
isset fungerar nog inte av samma anledning som empty.
Hmm, min lösning är inte klockren ändå, jag vill ju ha kvar nycklarna i arrayen, vilket gör att jag måste skapa en kopia av den först. Funkar, men känns onödigt komplicerat.
Svårt att hjälpa när man inte kan testa själv. :l
Funkar det inte att endast köra if(!$arr) då?
if fungerar tyvärr inte heller. Det hade ju nästan varit för lätt. :)
Tack för att du försöker hjälpa i alla fall, alltid bra med lite nya tankar när man kört fast.
$tom = TRUE;
foreach ($arr as $t)
if ($t != '') $tom = FALSE;
if ($tom) {
//Do things
}
Borde funka. :)
Jo, men då måste han köra en loop, tänkte först i samma banor.
Men det känns som det måste gå att lösa på ett enklare vis.
Jag kan inte php, så jag vet inte om det finns ett bättre sätt, men ett förslag:
if (implode("", $arr)=="") {
// tomt utav bara helskotta!
}
Mvh
Melea skrev:
Jo, men då måste han köra en loop, tänkte först i samma banor.
Men det känns som det måste gå att lösa på ett enklare vis.
:q Antingen kör han loopen synligt, eller så anropar han en funktion i PHP som troligen är implementerad som en loop - vad är skillnaden? Bortsett ifrån om det fungerar eller ej?
Att isSet och empty inte funkar beror ju på att värdena är satta.
@nders, vad gör implode? :q Han vill ju inte bli av med satta verkliga värden.
Iofs, nog jag som är trött på morgonknuten. :OO
Jag funderar om det går att göra något med array_count_values().
Har ingen möjlighet att testa själv, men vad händer om du gör så här ?
$check = array_count_values($arr);
if (isset($check['']) && count($check) == 1) {
// Arrayen består bara av tomma värden
}
Om det inte fungerar, kör en print_r() på $check, och se vad den ger. Då borde man kunna se hur man ska ändra sin if-sats för att få det att fungera.
[EDIT]
Såg nu @nders variant.
Den är den helt rätta. Har man bara tomma värden ger implode en tom sträng.
Då hans implode heller inte tilldelas till någon variabel, påverkas heller inte arrayen.
@nders, vad gör implode?
Implode klistrar ihop alla platser i arrayen till en sträng, med given separator (ingen i detta fall). Ingen förändring görs på arrayen, utan en ny sträng skapas (som i det här fallet bara används för att jämföra.).
Mvh
@anders förslag funkade klockrent. Är nog den smidigaste lösningen. Tack för hjälpen allihopa. :)
@nders och Matte - vad vinner man på era förslag jämfört med att löpa igenom arrayen för hand? Båda förslagen måste väl också löpa igenom arrayen och göra lite mer dessutom? Eller? Handlar det mer om kortare kod?
Jag vill gärna förstå vad skillnaden är. :q
Bjuufaren - markera @nders svar som löst! :)