WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Loopa flera arrays (https://www.wn.se/forum/showthread.php?t=27809)

KarlRoos 2008-03-09 18:43

Hej,
går det att loopa flera stycken arrays i PHP i samma loop?
Verkar inte funka med foreach.

Kod:

<?php
function make_list($url,$title,$display)
{
        $return = '';
        foreach($url as $url)
        {
 *$return = $return . $url;
 *foreach($title as $title)
 *{
 *        $return = $return . $title;
 *        foreach($display as $display)
 *        {
 * *$return = $return . $display;
 *        }
 *}
        }
        return $return;
}

$url = array();
$title = array();
$display = array();

$url[0] = 'url0';
$title[0] = 'title0';
$display[0] = 'display0';
$url[1] = 'url1';
$title[1] = 'title1';
$display[1] = 'display1';

echo make_list($url,$title,$display);
?>

Skriver ut...
Citat:

Warning: Invalid argument supplied for foreach() in /home/web28141/domains/roosstudios.com/public_html/test.php on line 11

Warning: Invalid argument supplied for foreach() in /home/web28141/domains/roosstudios.com/public_html/test.php on line 8
url0title0display0display1title1url1

Det funkar iofs, men gillar inte när jag får massa errors <_<
Och jag tänker inte trycka in ini_set('display_errors', '0'); utan jag vill ha "riktig" kod.

Tack :)

MMC 2008-03-09 18:49

PHP klagar för att du använder samma variabel för både X och Y i foreach (X as Y). Testa att kalla dina arrayer för plural, så här: foreach ($titles as $title)

KarlRoos 2008-03-09 19:11

Kod:

function make_list($urls,$titles,$displays)
{
        $return = '';
        foreach($urls as $url)
        {
 $return = $return . $url;
 foreach($titles as $title)
 {
        $return = $return . $title;
        foreach($displays as $display)
        {
  $return = $return . $display;
        }
 }
        }
        return $return;
}

blir...
Citat:

url0title0display0display1title1display0display1ur l1title0display0display1title1display0display1
Jag förstår ju varför..
1:1 -> 1:1, 2:1, 2:2, 3:1, 3:2
1:2 -> 1:2, 2:1, 2:2, 3:1, 3:2
.. men det funkade innan jag bytte namn på variablarna, finns det något annat sätt?
Något som borde fungera är
Kod:

foreach($urls as $url and $titles as $title and $displays as $display)
men det funkade inte :unsure:

patjoh 2008-03-09 20:00

Om det bara är en lista som det handlar om nu borde väl nåt sånt här fungera eller har jag missförstått vad du försöker göra?


Kod:

function make_list($urls, $titles, $displays) {
        $str = "";
        foreach($urls as $index => $value) {
 $str .= $value . $titles[$index] . $displays[$index];
        }
       
        return $str;
}


HenSod 2008-03-09 20:00

Du har nästlade foreach och det innebär att en foreach i en annan foreach loopar igenom hela vektorn innan den yttersta foreach går vidare till nästa index. Ett bättre och fungerande sätt är att använda for.
Kod:

function make_list($urls,$titles,$displays)
{
$return = '';
for ($i=0; $i<sizeof($urls); $i++) {
 $return .= $urls[$i] . $titles[$i] . $displays[$i];
}
return $return;
}


NevYn 2008-03-09 20:05

En annan möjlig lösning?

Kod:

function make_list($arr)
{
        $ret = '';
        foreach ($arr as $key)
        {
 $ret .= "url: ".$key->url."<br>";
 $ret .= "title: ".$key->title."<br>";
 $ret .= "display: ".$key->display."<br><br>";
        }
        return $ret;
}

$container = array();

$container[0]->url = 'url0';
$container[0]->title = 'title0';
$container[0]->display = 'display0';

$container[1]->url = 'url1';
$container[1]->title = 'title1';
$container[1]->display = 'display1';

echo make_list($container);


KarlRoos 2008-03-09 20:05

Tack så mycket HenSod :)

Edit: och NevYn :)


Alla tider är GMT +2. Klockan är nu 18:08.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson