Autor Zpráva
jan98
Profil *
jak odstranit z array prazdny string ktery vypada takto: array(11) { [0]=> string(5) " " [1]=> string(34) ...

kdyz napisu neco takoveho tak to nefunguje:

foreach($array as $key => $value) {
if($value == " ") { // vyhledat hodnotu -> string(5) " "
unset($array[$key]); // smazat klic kde je string(5) " "
}
}

diky
Tori
Profil
jan98:
array(11) { [0]=> string(5) " " [1]=> string(34) ...
Řetězec který chcete vyhodit má pět bílých znaků, hledáte jeden. Dalo by se použít hledání bílých znaků pomocí regulárem, ale asi rychlejší varianta bude tohle:
foreach ($array as $key=>$val)  {
  $tmp = (int) $val;
  if ($tmp == 0 && is_string($val))
    unset($array[$key]);
}
Vyfiltruje to hodnoty obsahující mezery, CR, LF a TAB v libovolné kombinaci a počtu. Klíče obsahující nulu (číslem), NULL a FALSE zůstanou zachované (což můžete změnit vyhozením is_string).

Opraveno podle [#4], překlep v názvu proměnné.
jan98
Profil *
Díky, ale pořád mi to nehce smazat ty "prázdné" hodnoty.

Původně i v tom prvním postu jsem vyhledával 5-ti místnou hodnotu if($value == "(5 - míst)") ..

//TEST:

$array = array ("     ","string"," ",0,1);

foreach ($array as $key=>$value)  {
  $tmp = (int) $val;
  if ($tmp == 0 && is_string($val))
    unset($array[$key]);
}

var_dump($array);
panther
Profil
jan98:
v cyklu na ř. 5 máš proměnnou $value, v těle cyklu máš pak proměnnou $val.
Tori
Profil
panther:
To byla chyba u mě, díky a janovi98 se omlouvám.
jan98
Profil *
ano, toho už jsem si všiml že je tam špatná proměnná. Ale pokud použiju přímo kód od Toriho výsledek je:

array(2) { [3]=> int(0) [4]=> int(1) }


odstraní to i ostatní hodnotu "string" (na druhém místě v ukázce) což samozřejmě nechci
Tori
Profil
Aha, opravdu to nefunguje,... nějak jsem si spletla dohromady (int) $string vs. (bool) $string. Nenapadá mě teď nic funkčního.
panther
Profil
jan98:
<?php

$array = array ("   ", "string", " ", 0, 1);

foreach ($array as $key=>$value)  {
    $val = trim($value);
    if (empty($val) and !is_numeric($value))
        unset($array[$key]);
}

var_dump($array); // array(3) { [1]=> string(6) "string" [3]=> int(0) [4]=> int(1) } 
//pokud chces vyhodit i nulu, odmaz podminku is_numeric, nula neprojde skrze empty

?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: