Autor Zpráva
HGD
Profil
Prosím o radu, mám vstup z formuláře toto pole
  Array ( [0] => Array ( [id_name] => Moje [block_name] => Name [max] => 1 ) [1] => Array ( [id_name] => [block_name] => Name [max] => ) ) 

a pokud není zadáno "max" tak by se měl řádek, resp. celé pole o 3 prvcích smazat
    foreach($input as $key => $val){
        if(empty($val['max'])){
       array_splice($input, $key, 1);
        }
    }

problém je, že pokud zadám více řádků, kde je pole "max" prázdné, tento cyklus mi smaže jen jeden řádek a ostatní prázdné uloží.

Kde dělám chybu?

PS.: je to psané pro wordpress
juriad
Profil
Děje se to protože splice mění pole $input foreachi pod rukama.
$output = array_filter($input, function($item) {return !empty($item['max']);});
Pokud chceš mít přečíslované položky v poli, použij následně ještě:
$output = array_slice($output, 0);
HGD
Profil
jak může měnit pole pro cyklus, když foreach podle php manuálu pracuje s kopií pole... divný
Keeehi
Profil
Foreach do $val vkládá kopii hodnoty, ale nekopíruje celé pole.
HGD
Profil
a když k tomu přidám doplnění "id_name"... to taky nepremává :(
    foreach($output as $val){
        if(empty($val['id_name'])){
       $val['id_name'] = $val['block_name'];
        }
    }
Keeehi
Profil
foreach($output as &$val){

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: