Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  php abi vaja: array jagamine gruppideks märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
poroloon
HV kasutaja
poroloon

liitunud: 25.07.2010




sõnum 25.05.2011 10:45:37 php abi vaja: array jagamine gruppideks vasta tsitaadiga

Ühe scripti lingisüsteem topib andmed sessiooni (iga kasutaja jaoks eraldi) ja sealt tuleb päris korralik koodirägastik (vähemalt mu jaoks),
siin on print_r($_SESSION['shv_links']) väljund:
Array
(
    [8] => Array
        (
            [link_id] => 8
            [link_url] => http://www.niisama.bla/
            [link_title] => Test
            [time] => 2011-05-23 10:46:16
            [group_id] => 1
        )

    [9] => Array
        (
            [link_id] => 9
            [link_url] => http://www.niisama2.bla/
            [link_title] => Video
            [time] => 2011-05-23 10:46:04
            [group_id] => 1
        )

    [11] => Array
        (
            [link_id] => 11
            [link_url] => http://www.niisama3.bla/
            [link_title] => Test 3
            [time] => 2011-05-23 10:48:43
            [group_id] => 2
        )

)

Kahjuks mina ei oska muud kui sellist väljundit:
<ul>
<li>Test</li>
<li>Video</li>
<li>Test 3</li>
</ul>

Seda tegin nii:
php:
  1. <ul>
  2. <?php foreach($_SESSION['shv_links'] as $link_id => $link){ ?>
  3. <li><a href="<?=$link['link_url']?>"><?=$link['link_title']?></a></li>
  4. <?php } ?>
  5. </ul>


icon_arrow.gif Vaja oleks nii, et php sorteeriks lingid [group_id] järgi, eristaks nad, paigutaks gruppidesse:
<ul>
  <li><!-- siin võtan db-st grupi nime grupi id (hetkel siis 1) järgi ja kuvan nime siia. -->
    <ul>
      <li>Test</li>
      <li>Video</li>
    </ul>
  </li><!-- 1. grupi lõpp -->
  <li><!-- db-st grupi nimi grupi id (2), kuvan nime. -->
    <ul>
      <li>Test 3</li>
    </ul>
  </li>
</ul>

...ja nii edasi, gruppe ja linke tuleb palju rohkem. Lisaks oleks mõnus, kui oskaksin neid sorteerida, id või aja vms. järgi, aga see pole nii tähtis.
Oskab keegi aidata? icon_redface.gif
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 25.05.2011 11:26:10 vasta tsitaadiga

Saada nad siis group id järgi erinevatesse array'desse?
Tekitad uue array kus esmaseks dimensiooniks on group id ja siis link id.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
matis
HV kasutaja
matis

liitunud: 12.04.2004




sõnum 25.05.2011 11:32:32 vasta tsitaadiga

Kasuta usort funktsiooni: http://ee.php.net/manual/en/function.usort.php

php:
  1.  
  2.     //defineeri sorteerimisfuntksioon, see funktsioon ütleb kuidas ära tunda, milline array element on väiksem kui teine.
  3.         function sortGroupId($a, $b) {
  4.             if ($a['group_sort'] == $b['group_sort']) {
  5.                 return 0;
  6.             }
  7.             return ($a['group_sort'] < $b['group_sort']) ? -1 : 1;
  8.     }
  9.  
  10.     //sorteeri, teiseks parameetriks annad siis funktsiooni nime, mis enne defineerisid. Kui sorteerimisfunktsioon asub klassi sees, siis oleks teine parameeter nii: array('Klassinimi', 'funktsioonimi')
  11.    usort($_SESSION['shv_links'], "sortGroupId")
  12.  

_________________
https://www.e-abi.ee/ - Pangalingid, Smartposti, Post24 moodulid, Järelmaksumoodulid. Magento, Prestahop, Wordpress. Aktsepteerin Bitcoini!
Soovid lisada oma tooteid HinnaVaatlusesse? https://www.e-abi.ee/magento/kasulikud/product-exporter-and-multi-product-feed-generator-hinnavaatlus.html
Kommentaarid: 64 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
poroloon
HV kasutaja
poroloon

liitunud: 25.07.2010




sõnum 25.05.2011 11:54:30 vasta tsitaadiga

ee... ikkagi mul pole halli aimugi, kuidas kuvada seda asja html-i nii nagu ma esimeses postituses kirjeldasin. icon_redface.gif
Praegu ma sain ainult samasuguse array väljundi, kuid ainult teises järjestuses, välja kuvada ma seda ikka ei oska. {juhe koos}
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 25.05.2011 12:34:17 vasta tsitaadiga

Lihtsalt sorti puhul tuleb vast keerulisem tiba kood et ära eraldada neid eri gruppe. Kui kahte dimensiooni panna, siis teed sinna praeguse <ul> ümber veel ühe foreach, mis käib iga selle grupi ka läbi.
Ehk siis array oleks stiilis:
grupi id
  elemendi id

Näiteks:
grupp 1
  element 1
  element 2
grupp 2
  element 3

Ja foreachiga siis iga grupi kohta väljastad oma ul elemendid ja nende vahel siis teine foreach, mis käib iga grupi id sisu läbi.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
matis
HV kasutaja
matis

liitunud: 12.04.2004




sõnum 25.05.2011 12:40:49 vasta tsitaadiga

php:
  1.  
  2. <?php
  3. $prevGroup = false;
  4. ?>
  5. <ul>
  6.         <?php foreach($_SESSION['shv_links'] as $link_id => $link){ ?>
  7.         <?php
  8.                 if (!$prevGroup) {
  9.                      $prevGroup = $link['group_id'];
  10.                      ?>
  11.                      <li><?php echo $link['group_id']; ?>
  12.                         <ul>
  13.                      <?php
  14.                 }
  15.                 if ($prevGroup != $link['group_id']) {
  16.                         ?>
  17.                         <!-- sulge eelmine grupp -->
  18.                                 </ul>
  19.                         </li>
  20.                         <!-- ava uus grupp -->
  21.                      <li><?php echo $link['group_id']; ?>
  22.                         <ul>
  23.                         <?php
  24.                 }
  25.                 ?>
  26.                 <li><a href="<?=$link['link_url']?>"><?=$link['link_title']?></a></li>
  27.                 <?php
  28.                         $prevGroup = $link['group_id'];
  29.                 ?>
  30.         <?php } ?>
  31. <!--tsykkel läbi, sulge kõik -->
  32. </ul>
  33. </li>
  34. </ul>
  35.  


Proovi midagi sellist, see ei kuva grupi nime aga kuvab grupi id.
Mõistlik on teha array, kuhu sisse saadakse kõik grupi id-d

php:
  1.  
  2. $groupNames = array(
  3.  '1' => 'esimene grupp',
  4.  '2' => 'teine grupp',
  5. );
  6. //siis saab pärast reference teha
  7. echo $groupNames[$link['group_id']];
  8.  

_________________
https://www.e-abi.ee/ - Pangalingid, Smartposti, Post24 moodulid, Järelmaksumoodulid. Magento, Prestahop, Wordpress. Aktsepteerin Bitcoini!
Soovid lisada oma tooteid HinnaVaatlusesse? https://www.e-abi.ee/magento/kasulikud/product-exporter-and-multi-product-feed-generator-hinnavaatlus.html
Kommentaarid: 64 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
poroloon
HV kasutaja
poroloon

liitunud: 25.07.2010




sõnum 22.06.2011 11:52:35 vasta tsitaadiga

Sama asjaga tekkis uus mure, pärast mõningast testimist. Lingid on suvalises järjekorras, kuigi lisasin sinna [link_ordering] numbri igale lingile. Ma ei oska selle järgi sorteerida nii, et grupid ka jääksid alles. Kui saan järjestuse õigeks, siis on grupid sassis (kuvatakse mitu korda sama gruppi millegipärast) ja kui grupid on korras, siis on lingid suvalt sassis.
Näiteks nii on vaja
grupp 1
  element 1
  element 2
  element 3
grupp 2
  element 1
  element 2
  element 3
  element 4
  element 5

Kuid kuvab nii:
grupp 1
  element 2
  element 3
  element 1
grupp 2
  element 1
  element 5
  element 4
  element 2
  element 3

Siis, kui elementide jrk. saan õigeks, kuvab nii (valesti muidugi):
grupp 1
  element 1
  element 2
grupp 2
  element 1
  element 2
  element 3
grupp 1
  element 3
grupp 2
  element 4
  element 5

Mul pole aimugi, mida teha. Olen netis ringi tuulutanud ja katsetanud, tulemused on samad. icon_sad.gif

Muide, elementide link_ordering väärtus võib ühtida igas grupis. Ühes grupis on 0,1,2,3,4,5 ja teises pole mitte 6,7,8, vaid ka 0,1,2.
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
matis
HV kasutaja
matis

liitunud: 12.04.2004




sõnum 22.06.2011 15:51:57 vasta tsitaadiga

Muuda funktsioon sortGroupId selliseks ja ülejäänud kood jäta samaks, siis peaks nagu toimima.

php:
  1.  
  2. function sortGroupId($a, $b) {
  3.         if ($a['group_sort'] == $b['group_sort']) {
  4.                 //siin group sort on sama, võta arvesse ka link ordering
  5.                 if ($a['link_ordering'] == $b['link_ordering']) {
  6.                         return 0;
  7.                 }
  8.                 return ($a['link_ordering'] < $b['link_ordering']) ? -1 : 1;
  9.         }
  10.         //siin group sort pole sama, tagasta nende erinevus
  11.         return ($a['group_sort'] < $b['group_sort']) ? -1 : 1;
  12. }
  13.  

_________________
https://www.e-abi.ee/ - Pangalingid, Smartposti, Post24 moodulid, Järelmaksumoodulid. Magento, Prestahop, Wordpress. Aktsepteerin Bitcoini!
Soovid lisada oma tooteid HinnaVaatlusesse? https://www.e-abi.ee/magento/kasulikud/product-exporter-and-multi-product-feed-generator-hinnavaatlus.html
Kommentaarid: 64 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
poroloon
HV kasutaja
poroloon

liitunud: 25.07.2010




sõnum 23.06.2011 00:13:44 vasta tsitaadiga

Targad inimesed siin ikka icon_biggrin.gif Tänud jällegi! beer_yum.gif
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  php abi vaja: array jagamine gruppideks
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.