Nedaří se mi uspořádat pole s čísly – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nedaří se mi uspořádat pole s čísly – PHP – Fórum – Programujte.comNedaří se mi uspořádat pole s čísly – PHP – Fórum – Programujte.com

 

oxidián0
Grafoman
27. 11. 2022   #1
-
0
-

Ahoj. Poradíte mi proč se mi nedaří seřadit hodnoty v poli? Je to pole hodně strukturované, takže var_dump jsem udělal jen na jednotlivé části, které jsem třídil.

Třídění chci udělat podle hodnot. Verzi php mám 5.4.16
 

 Tuto funkci jsem zkoušel až po sort(), ale prakticky stejný výsledek ať tam dám intval nebo ne.

function myCmpFnc($a, $b)
{
    if (intval($a) == intval($b)) {
        return 0;
    }
    return ( intval($a) < intval($b)) ? -1 : 1;
}

//var_dump($img_list);
foreach ($img_list as $k => $v):
  if ($img_list[$k]['c']):
    usort($img_list[$k]['c'],"myCmpFnc");
    var_dump($img_list[$k]['c']);
  else:  
    for($i=0;$i<count($img_list[$k]['Q_alternative']);$i++)
      usort($img_list[$k]['Q_alternative'][$i],"myCmpFnc");
    var_dump($img_list[$k]['Q_alternative']);  
      
  endif;    
endforeach;

var_dump($img_list);
// print_r($img_list);

To pole, které je hlouběji vnořené se nepodařilo správně uspořáadat podle hodnoty čísla.

array (size=2)
  0 => 
    array (size=2)
      0 => 
        array (size=8)
          0 => int 1
          1 => int 2
          2 => int 3
          3 => int 4
          4 => int 5
          5 => int 6
          6 => int 7
          7 => int 8
      1 => int 8
  1 => 
    array (size=2)
      0 => 
        array (size=12)
          0 => int 1
          1 => int 10
          2 => int 11
          3 => int 12
          4 => int 2
          5 => int 3
          6 => int 4
          7 => int 5
          8 => int 6
          9 => int 7
          10 => int 8
          11 => int 9
      1 => int 12

array (size=3)
  0 => 
    array (size=2)
      0 => 
        array (size=10)
          0 => int 1
          1 => int 10
          2 => int 2
          3 => int 3
          4 => int 4
          5 => int 5
          6 => int 6
          7 => int 7
          8 => int 8
          9 => int 9
      1 => int 10
  1 => 
    array (size=2)
      0 => 
        array (size=10)
          0 => int 1
          1 => int 10
          2 => int 2
          3 => int 3
          4 => int 4
          5 => int 5
          6 => int 6
          7 => int 7
          8 => int 8
          9 => int 9
      1 => int 10
  2 => 
    array (size=2)
      0 => 
        array (size=10)
          0 => int 1
          1 => int 10
          2 => int 2
          3 => int 3
          4 => int 4
          5 => int 5
          6 => int 6
          7 => int 7
          8 => int 8
          9 => int 9
      1 => int 10

array (size=9)
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4
  4 => int 5
  5 => int 6
  6 => int 7
  7 => int 8
  8 => int 9

array (size=10)
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4
  4 => int 5
  5 => int 6
  6 => int 7
  7 => int 8
  8 => int 9
  9 => int 10

array (size=12)
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4
  4 => int 5
  5 => int 6
  6 => int 7
  7 => int 8
  8 => int 9
  9 => int 10
  10 => int 11
  11 => int 12

array (size=7)
  'Mon' => 
    array (size=4)
      'n' => int 6
      'c' => 
        array (size=6)
          0 => int 1
          1 => int 2
          2 => int 3
          3 => int 4
          4 => int 5
          5 => int 6
      'Q_alternative' => boolean false
      'single' => boolean true
  'Tue' => 
    array (size=4)
      'n' => int 14
      'c' => boolean false
      'Q_alternative' => 
        array (size=2)
          0 => 
            array (size=2)
              ...
          1 => 
            array (size=2)
              ...
      'single' => boolean false
  'Wed' => 
    array (size=4)
      'n' => int 20
      'c' => boolean false
      'Q_alternative' => 
        array (size=2)
          0 => 
            array (size=2)
              ...
          1 => 
            array (size=2)
              ...
      'single' => boolean false
  'Thu' => 
    array (size=4)
      'n' => int 30
      'c' => boolean false
      'Q_alternative' => 
        array (size=3)
          0 => 
            array (size=2)
              ...
          1 => 
            array (size=2)
              ...
          2 => 
            array (size=2)
              ...
      'single' => boolean false
  'Fri' => 
    array (size=4)
      'n' => int 9
      'c' => 
        array (size=9)
          0 => int 1
          1 => int 2
          2 => int 3
          3 => int 4
          4 => int 5
          5 => int 6
          6 => int 7
          7 => int 8
          8 => int 9
      'Q_alternative' => boolean false
      'single' => boolean true
  'Sat' => 
    array (size=4)
      'n' => int 10
      'c' => 
        array (size=10)
          0 => int 1
          1 => int 2
          2 => int 3
          3 => int 4
          4 => int 5
          5 => int 6
          6 => int 7
          7 => int 8
          8 => int 9
          9 => int 10
      'Q_alternative' => boolean false
      'single' => boolean true
  'Sun' => 
    array (size=4)
      'n' => int 12
      'c' => 
        array (size=12)
          0 => int 1
          1 => int 2
          2 => int 3
          3 => int 4
          4 => int 5
          5 => int 6
          6 => int 7
          7 => int 8
          8 => int 9
          9 => int 10
          10 => int 11
          11 => int 12
      'Q_alternative' => boolean false
      'single' => boolean true



Část print_r skoro celého pole.

...
    [Wed] => Array
        (
            [n] => 20
            [c] => 
            [Q_alternative] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 1
                                    [1] => 2
                                    [2] => 3
                                    [3] => 4
                                    [4] => 5
                                    [5] => 6
                                    [6] => 7
                                    [7] => 8
                                )

                            [1] => 8
                        )

                    [1] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 1
                                    [1] => 10
                                    [2] => 11
                                    [3] => 12
                                    [4] => 2
                                    [5] => 3
                                    [6] => 4
                                    [7] => 5
                                    [8] => 6
                                    [9] => 7
                                    [10] => 8
                                    [11] => 9
                                )

                            [1] => 12
                        )

                )

            [single] => 
        )

    [Thu] => Array
        (
            [n] => 30
            [c] => 
            [Q_alternative] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 1
                                    [1] => 10
                                    [2] => 2
                                    [3] => 3
                                    [4] => 4
                                    [5] => 5
                                    [6] => 6
                                    [7] => 7
                                    [8] => 8
                                    [9] => 9
                                )

                            [1] => 10
                        )

                    [1] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 1
                                    [1] => 10
                                    [2] => 2
                                    [3] => 3
                                    [4] => 4
                                    [5] => 5
                                    [6] => 6
                                    [7] => 7
                                    [8] => 8
                                    [9] => 9
                                )

                            [1] => 10
                        )

                    [2] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 1
                                    [1] => 10
                                    [2] => 2
                                    [3] => 3
                                    [4] => 4
                                    [5] => 5
                                    [6] => 6
                                    [7] => 7
                                    [8] => 8
                                    [9] => 9
                                )

                            [1] => 10
                        )

                )

            [single] => 
        )

    [Fri] => Array
        (
            [n] => 9
            [c] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                    [3] => 4
                    [4] => 5
                    [5] => 6
                    [6] => 7
                    [7] => 8
                    [8] => 9
                )

            [Q_alternative] => 
            [single] => 1
        )

    [Sat] => Array
        (
            [n] => 10
            [c] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                    [3] => 4
                    [4] => 5
                    [5] => 6
                    [6] => 7
                    [7] => 8
                    [8] => 9
                    [9] => 10
                )

            [Q_alternative] => 
            [single] => 1
        )

    [Sun] => Array
        (
            [n] => 12
            [c] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                    [3] => 4
                    [4] => 5
                    [5] => 6
                    [6] => 7
                    [7] => 8
                    [8] => 9
                    [9] => 10
                    [10] => 11
                    [11] => 12
                )

            [Q_alternative] => 
            [single] => 1
        )

)

Něco uspořádané je a něco ne. Tak nevím co s tím.

Nahlásit jako SPAM
IP: 94.113.186.–
gna
~ Anonymní uživatel
1891 příspěvků
27. 11. 2022   #2
-
0
-

Mně to připadá, že chceš sortovat o úroveň hlouběji.

// ne tak
$img_list[$k]['Q_alternative'][$i]
// ale tak
$img_list[$k]['Q_alternative'][$i][...]

Ale moc do detailu jsem to nezkoumal (je to dlouhýýý)

Nahlásit jako SPAM
IP: 213.211.51.–
oxidián0
Grafoman
27. 11. 2022   #3
-
0
-

#2 gna Dík, měl jsi pravdu.

Tak to teď ladím a zjišťuji, že druhá větěv var_dump se nezobrazuje. Zakomentuji první větev a není tam žádný výsledek na výstupu (poté co jsem ostatní var_dump apod. zakomentoval). Dal jsem tam podmínku:

    if ($i>7):
    var_dump($img_list[$k]['Q_alternative'][$i]);  
      die("finito");endif;


Tak jsem na to přišel struktura je taková:

var_dump($img_list[$k]['Q_alternative'][0]['c']);
Nahlásit jako SPAM
IP: 94.113.186.–
peter
~ Anonymní uživatel
4016 příspěvků
27. 11. 2022   #4
-
0
-

ja bych si zkusil vypisovat uplne vsech. At vis, kde prave jsi, zda neco takove existuje a zda to proslo do te compare funkce. A pak zkoumej, jak se to melo seradit a proc to neudelalo.

function myCmpFnc($a, $b)
{
var_dump('myCmpFnc', $a, $b, intval($a) == intval($b), intval($a) < intval($b))
    if (intval($a) == intval($b)) {
        return 0;
    }
    return ( intval($a) < intval($b)) ? -1 : 1;
}


//var_dump($img_list);
foreach ($img_list as $k => $v):
var_dump('foreach1',$img_list[$k]['c'])
  if ($img_list[$k]['c']):
    usort($img_list[$k]['c'],"myCmpFnc");
    var_dump($img_list[$k]['c']);
  else:  
var_dump('foreach2',$img_list[$k]['Q_alternative'])
    for($i=0;$i<count($img_list[$k]['Q_alternative']);$i++)
{
var_dump('foreach3',$img_list[$k]['Q_alternative'][$i])
      usort($img_list[$k]['Q_alternative'][$i],"myCmpFnc");
}
      
  endif;    
endforeach;

var_dump($img_list);

Jo, co mi neni jasne, kdyz uz tam mas k=>v, proc to nevyuzivas.

foreach ($img_list as $k => $v):
var_dump('foreach1',$img_list[$k]['c'])
  if ($v['c']):
    usort($v['c'],"myCmpFnc");
    var_dump($v['c']);
  else:  
var_dump('foreach2',$v['Q_alternative'])
    for($i=0;$i<count($v['Q_alternative']);$i++) // a tohle by slo zrychlit
{
var_dump('foreach3',$v['Q_alternative'][$i])
      usort($v['Q_alternative'][$i],"myCmpFnc");
}
      
  endif;    
endforeach;

---

// for($i=0;$i<count($v['Q_alternative']);$i++) 
$c = count($v['Q_alternative']);
for($i=0;$i<$c;$i++) // rozdil je v tom, ze se count pouzije jen jednou, 
//v opacnem pripade se vola pri kazdem $i, protoze neni jiste, zda se
// pocet polozek nezmenil.
// aspon mam pocit, ze php se nechova jako jine jazyky a brzdi to nepatrne
// celou smycku.
Nahlásit jako SPAM
IP: 193.84.198.–
peter
~ Anonymní uživatel
4016 příspěvků
27. 11. 2022   #5
-
0
-

A nebo, jestli je to mozne (jestli tam mas cisla), muzes opet pouzit foreach.

// for($i=0;$i<count($v['Q_alternative']);$i++) 
foreach ($v['Q_alternative'] as $k2 => $v2):

Ono, totiz, tam muzes mit i necisla a nebo tam nemusis mit vsechna cisla

$x = array (1,5,7)
count($x) // 3

// pak 1. ti ten cyklus neprojede vsechny moznosti
// 2. selhava na $v[0] = 1; $v[0] = undefined; $v[2] = undefined;
// prace s vyhozenim vyjimky (chyby) opet cely cyklus zdrzuje
Nahlásit jako SPAM
IP: 193.84.198.–
JerryM0
Věrný člen
28. 11. 2022   #6
-
0
-

#1 oxidián
koukám ty seš docela drak :) tak v pondělí děláš programátora v Delphi a v úterý v C++ a ve středu v PHP .. woooooooooou úplnej superman :)

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:e8d6:ff58:2d58:f36d...–
peter
~ Anonymní uživatel
4016 příspěvků
28. 11. 2022   #7
-
0
-

Asi ma vic zakazniku, ukolu, a postupne to vytahuje. Dodela, co se mu podari vyresit a ostatni maji smulu nebo si pockaji.

Nahlásit jako SPAM
IP: 2001:718:2601:258:7d8c:7b56:5466:a561...–
JerryM0
Věrný člen
28. 11. 2022   #8
-
0
-

přesně takhle si představuju ideálního chirurga :) ve frontě každý den 24 pacientů, úmrtnost 95 procent :)

myslim že momentálně takhle pracuje naše vláda :)

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:e8d6:ff58:2d58:f36d...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý