Autor Zpráva
Rellik
Profil
Zdravím, potřeboval bych poradit s jednou věcí. Mám pole, ve kterém se mění obsah. Jednou to pole obsahuje několik dalších polí =>2 a někdy je to jen jedno samotné pole.

Nejlíp to bude vidět na příkladu:
Jde o výpisy z databáze. Pokud je v databázi pouze jeden záznam, tak se o pole vypíše přímo:
Array ( [id] => 29 [nazev] => Pokusný text [popis] => něco [obsah] => sd fgsdfgh ?? [obrazek] => a.jpg)
Pokud je v BD záznamů víc, vytvoří se pro každý záznam pole v poli.
Array ( [0] => Array ( [id] => 29 [nazev] => Pokusný text [popis] => něco [obsah] => sd fgsdfgh ?? [obrazek] => a.jpg) 
        [1] => Array ( [id] => 30 [nazev] => dff [popis] => něco jiného [obsah] => pokus [obrazek] => b.jpg)
         )
Potřeboval bych nějak vyhodnotit rozdíl mezi těmito poli. Zkoušel sem to pomocí count(), ale to spočítá buď kolik je buněk v tabulce a nebo když je v DB víc záznamů tak kolik je dalších polí, což mi moc nepomůže :( Stačilo by mi vyhodnotit asi tak: jednoduché pole -> 0 složené pole -> počet polí v poli.
Poradí někdo? Díky :)
abc
Profil *
Naslepo:
is_array($array[0])
Rellik
Profil
To sem taky zkoušel ale moc to nepomohlo. Respektive vůbec. Potřebuju zjistit počet těch polí v poli, kvůli stránkování. Už sem vyzkoušel několik způsobů, které jsou v manuálu PHP http://cz.php.net/manual/en/function.count.php ale ani jeden neřeší můj problém :(
Bertram
Profil
Stačilo by mi vyhodnotit asi tak: jednoduché pole -> 0 složené pole -> počet polí v poli
Ahoj a mysqli_num_rows($result) by ti nestačilo?
abc
Profil *
No, me teda funguje count($array[0])
Cela ukazka meho kodu:
        $array = Array ( 0 => Array (id => 29, nazev => 'Pokusný text', popis => 'něco', obsah => 'sd fgsdfgh', obrazek => a.jpg),  
        1 => Array ( id => 30, nazev => 'dff', popis => 'něco jiného', obsah => 'pokus'));
        echo count($array[0]); // vypise 5
        echo count($array[1]); // vypise 4 - dal jsem pryc obrazek
Pomoci is_array rozhodnes, zda se bude delat count($array) nebo count($array[index])
Rellik
Profil
Bertram:
„Stačilo by mi vyhodnotit asi tak: jednoduché pole -> 0 složené pole -> počet polí v poli“
Ahoj a mysqli_num_rows($result) by ti nestačilo?
Bohužel nestačilo protože je to přes objekt a výstupem je právě pole. Je to podle tohoto tutoriálu: http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/comment-page-1/

abc:
Nejspíš si nerozumíme. Nechci spočítat prvky v poli. To zvládnu. Já potřebuju spočítat ty pole v poli. Když je pouze jednorozměrné pole, tak potřebuju na výstupu 1 když pole obsahuje další pole, tak potřebuju zjistit kolik je těch polí, ne počty jejich obsahů.
když to vezmu z prvního dotazu tak asi tak:
pole je jednoduché -> 1
Array ( [id] => 29 [nazev] => Pokusný text [popis] => něco [obsah] => sd fgsdfgh ?? [obrazek] => a.jpg)

Pokud je polí v poli víc tak potřebuju jejich počet. V ukázce jsou dvě takže - > 2
Array ( [0] => Array ( [id] => 29 [nazev] => Pokusný text [popis] => něco [obsah] => sd fgsdfgh ?? [obrazek] => a.jpg)  
        [1] => Array ( [id] => 30 [nazev] => dff [popis] => něco jiného [obsah] => pokus [obrazek] => b.jpg) 
         )
A to je právě ten problém. Že když je v DB jen jeden zápis tak je pole jednoduché, když je jich tam víc tak je složené...
abc
Profil
na obe tve ukazky staci count($array), muzes pls uvest priklad pole, na ktery ti count() nestaci?
Rellik
Profil
abc:
Když dám count() na první možnost, tak vypíše 5 ,protože obsahuje pět položek. Když dám count() na druhou možnost vypíše 2 , protože obsahuje další dvě pole. A to právě ten problém u té první možnosti bych potřeboval aby to vypsalo jen jedničku, protože neobsahuje žádné další pole... Jinak ty ukázky jsou z reálného výpisu polí...
Bertram
Profil
Rellik:
Tak si tam tuto funkčnost dopiš, nebo honem honem pryč.

jinak např:
foreach ($pole as $item) {
  if (is_array ($item)) {
    $pocetZaznamu = count($pole);
    break;
  } else  {
    $pocetZaznamu = 1;
  }
}
abc
Profil
aha, tak ted uz chapu, v cem je problem :-)
resenim je teda tohle:
$pocet = is_array($array[0])? count($array) : 1;

doufam, ze neprijdes s tim, ze nekde mas pole v poli, v poli :-)
Bertram
Profil
No a ještě sizeof() :)
Rellik
Profil
Bertram, abc:
Díky za rady to s tím $pocet = is_array($array[0])? count($array) : 1; mě mohlo taky napadlout... No to je tak když se hledá řešení jinde.. A přitom je to tak jednoduché...
Jinak po projití té třídy z toho webu sem zjistil že se tam ty řádky v databázi počítají taky, tak sem právě teď vyzkoušel všechny možnosti. S tím foreach to sice při obyčejném poli vypíše 1 ale u vícerozměrného pole to vypíše 0. Řešení od abc funguje správně. A nakonec jsem zjistil to že stačí použít schovanou funkci z toho objektu:
$pocet = $db->numResults;

Takže všem díky... Třeba to pomůže ještě někomu dalšímu... :)

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:

0