Avatar billede daniel_d Nybegynder
04. oktober 2007 - 23:54 Der er 14 kommentarer

problem med array der skal "opdeles"

Hej eksperter

Hvordan kan jeg opdele mit array så jeg et sted viser 1. post fra mit array og et andet sted viser resten fra den pågældende række.

Min kode er her, med angivelse af hvordan jeg gerne vil have det til at se ud, men kan sgu ikke lige hitte ud af det.

<?php echo $this->table->intro;?>
    <?php if(count($this->rows) == 0){?>
        <div class="emptyDataMessage"><?php echo $this->emptyDataMessage;;?></div>
    <?php }else{
        foreach($this->rows as $group){?>
            <table class="fabrikTable" style="width: 100%;">
                <tr class="oddrow1_modul"><td colspan="3"><a href="index.php?option=com_fabrik&Itemid=9">Se alle stillinger</a></td></tr>
                <?php
                $c = 0;
                foreach($group as $row){
                    ?>
                <tr class="oddrow<?php echo $c % 2;?>_modul">
                    <td>
                <?php foreach($this->headings as $heading=>$label){    ?>
                    FØRSTE VALUE HER MEN HVORDAN???<br /><?php echo($row->$heading);?>
                    <?php }?>
                    </td>
                </tr>
                <?php $c++;
            }
        }?>
                <tr><td colspan="3" align="right">1 2 næste side</td></tr>
            </table>
<?php }
Avatar billede daniel_d Nybegynder
04. oktober 2007 - 23:58 #1
og det er ikke et numerisk indekseret array - ved ikke om det betyder noget...
Avatar billede daniel_d Nybegynder
05. oktober 2007 - 00:21 #2
Det var faktisk ikke helt korrekt. Her er mit eks. som jeg gerne vil have det til at se ud:

    <?php if(count($this->rows) == 0){?>
        <div class="emptyDataMessage"><?php echo $this->emptyDataMessage;;?></div>
    <?php }else{
        foreach($this->rows as $group){?>
            <table class="fabrikTable" style="width: 100%;">
                <tr class="oddrow1_modul"><td colspan="3"><a href="index.php?option=com_fabrik&Itemid=9">Se alle stillinger</a></td></tr>
                <?php
                $c = 0;
                foreach($group as $row){
                    ?>
                <tr class="oddrow<?php echo $c % 2;?>_modul">
                    <td>
                    FØRSTE VALUE HER MEN HVORDAN???<br />
                    <?php foreach($this->headings as $heading=>$label){   
                        echo($row->$heading);
                    } ?>
                    </td>
                </tr>
                <?php $c++;
            }
        }?>
Avatar billede olebole Juniormester
05. oktober 2007 - 00:26 #3
<ole>

Hvis det er et associativt array, returnerer count($this->rows) jo 0

/mvh
</bole>
Avatar billede chrisp Nybegynder
05. oktober 2007 - 00:26 #4
Det var ikke helt så nemt som det lød..

metode 1.
lav noget counter og en if sætning.. men det er grimt og burde være unødvendigt..

metode 2.
tilføj disse 2 liner over din foreach
    list($firstkey,$firstvalue) = each($group);
    reset($group);

og så skulle du være kørende..
Avatar billede olebole Juniormester
05. oktober 2007 - 00:42 #5
daniel_d >> Der er også rod i dine 'tuborger'. Der er fem, der åbner - men kun fire, der lukker.

Hvorfor bruger du i det hele taget den rodede kodestil? Du får kun problemer ud af at rode markup- og serverkode sammen på den måde.

Lav i stedet funktioner, der samler strenge og returnerer dem til funktionskald i HTML'en.
Avatar billede daniel_d Nybegynder
05. oktober 2007 - 00:49 #6
chrisp: hvis det er sådan her du mener, så giver det intet output:

                    <?php
                        list($firstkey,$firstvalue) = each($group);
                        reset($group); ?><br />
                    <?php foreach($this->headings as $heading=>$label){   
                        echo($row->$heading);
                    } ?>

ole: jeg er en anelse (meget) på tynd is her, men laver jeg en:

var_dump($row) giver mig:
object(stdClass)#125 (13) { ["jos_fabrik_formdata_2.job"]=>  string(186) "PHP Programmør Århus" ["jos_fabrik_formdata_2___job"]=>  string(186) "PHP Programmør Århus" ["jos_fabrik_formdata_2.region"]=>  string(172) "(alle)" ["jos_fabrik_formdata_2___region"]=>  string(172) "(alle)" ["jos_fabrik_formdata_2.frist"]=>  string(176) "18-10-2007" ["jos_fabrik_formdata_2___frist"]=>  string(176) "18-10-2007" ["jos_fabrik_formdata_2.fabrik_internal_id"]=>  string(1) "2" ["jos_fabrik_formdata_2___fabrik_internal_id"]=>  string(1) "2" ["__pk_val"]=>  string(1) "2" ["_cursor"]=>  int(0) ["_total"]=>  int(2) ["fabrik_edit"]=>  string(175) "View" ["fabrik_view"]=>  string(164) "View" }

og

var_dump($row->$heading);

får jeg f.eks:

string(177) "PHP programmør Århus" string(177) "(alle)" string(176) "24-10-2007"

Jeg vil så gerne splitte arrayet op efter "PHP programmør Århus" , eller alternativt indsætte en key mellem "PHP programmør Århus" og "(alle)" med noget html i.
Avatar billede daniel_d Nybegynder
05. oktober 2007 - 00:53 #7
ole: grunden til at der mangler en tuborg, er at jeg ikke har kopieret hele koden ind. Den er der :)

ved godt koden ikke er så elegant, men skal bare have det til at virke hurtigt, så må jeg "pudse det af bagefter"...
Avatar billede chrisp Nybegynder
05. oktober 2007 - 00:57 #8
ok..
vi tager den i mindre skridt :-)

1. Hvad er det for et array du vil have første værdi fra $group eller $this->headings
hvis det er $group som jeg tror?, så skal du erstatte
$c = 0;
foreach($group as $row){

med
  $c = 0;
  list($firstkey,$firstvalue) = each($group);
  reset($group);
  foreach($group as $row){

koden giver ganske rigtigt ikke noget output. den ligger bare den første værdi ind i variablen $firstvalue
så det du skal for at få noget ud er at erstatte
FØRSTE VALUE HER MEN HVORDAN???
med <?php echo $firstvalue; ?>
Avatar billede daniel_d Nybegynder
05. oktober 2007 - 01:05 #9
det er første værdi af ($row->$heading) jeg vil have fat i. men det skal så "fjernes" fra arrayet så det ikke vises igen når:
<?php foreach($this->headings as $heading=>$label){   
    echo ($row->$heading);
} ?>
køres igennem

har fået denne til at virke:

    <?php }else{
        foreach($this->rows as $group){?>
            <table class="fabrikTable" style="width: 100%;">
                <tr class="oddrow1_modul"><td colspan="3"><a href="index.php?option=com_fabrik&Itemid=9">Se alle stillinger</a></td></tr>
                <?php
                $c = 0;
                foreach($group as $row){
                    ?>
                <tr class="oddrow<?php echo $c % 2;?>_modul">
                    <td>
                    <?php
                          list($firstkey,$firstvalue) = each($row);
                          reset($row);
                    ?>
                    <?php echo $firstvalue; ?><br />
                    <?php foreach($this->headings as $heading=>$label){   
                        echo ($row->$heading);
                    } ?>
                    </td>
                </tr>
                <?php $c++;
            }
        }?>

men så vises første værdi 2 gange, så hvordan er det nu man så fjerner værdien. Kan ikke helt få array_shift til at virke...
Avatar billede olebole Juniormester
05. oktober 2007 - 01:21 #10
Hvordan ser array'et $row->$heading ud?
Avatar billede chrisp Nybegynder
05. oktober 2007 - 01:34 #11
Du skal fjerne reset($row);..
så får du ikke den første værdi 2 gange..
each = rykker en plads i array'et
reset = resetter det til start.
Avatar billede daniel_d Nybegynder
05. oktober 2007 - 01:42 #12
Det har jeg prøvet, men det hjælper lige fedt...
Avatar billede daniel_d Nybegynder
05. oktober 2007 - 03:10 #13
Ole: Er det en var_dump du er ude efter?
var_dump($row->$heading);

så får jeg f.eks:

string(177) "PHP programmør Århus" string(177) "(alle)" string(176) "24-10-2007"
Avatar billede chrisp Nybegynder
05. oktober 2007 - 11:18 #14
Kan du ikke prøve at sende noget output..
for jeg er blevet lidt forviret på hvad det egentlig er du vil havde ud..
vis du sender
det du får
og så bagefter det du vil havde..
så har vi et klart mål at arbejde mod :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester