webForumDet fria alternativet

Slå ihop arrayer på smart sätt!

PHPur PHP

8 svar · 809 visningar · startad av learn

Medlem sedan jan. 20051 130 inlägg
Frågan#1

Jag har kört fast.

Två arrayer:

User
(
    [0] => Array
        (
            [userid] => 1
            [username] => test1
            [password] => hejhej
        )

    [1] => Array
        (
            [userid] => 2
            [username] => test2
            [password] => lalala
        )

)

Log
(
    [0] => Array
        (
            [logid] => 1
            [userid] => 2
            [date] => 2008-08-17
        )

    [1] => Array
        (
            [logid] => 2
            [userid] => 1
            [date] => 2008-08-18
        )

)

Nu vill jag slå ihop dem till en ända array, typ så här:

User
(
    [0] => Array
        (
            [userid] => 1
            [username] => test1
            [password] => hejhej
            [log] => 2008-08-18
        )

    [1] => Array
        (
            [ID] => 2
            [username] => test2
            [password] => lalala
            [log] => 2008-08-17
        )

)

Hur gör jag det på smartaste sett? Alla tips och förslag är välkomna!

Tack på förhand!

Medlem sedan jan. 20051 130 inlägg
#2

Ingen som har något tips på hur man kan göra? :q

Medlem sedan juli 2002630 inlägg
#3

array_merge() kanske är något?

http://se.php.net/array_merge

Medlem sedan jan. 20051 130 inlägg
#4

Nja, kanske... men det svåra är ju att få in värdena på rätt ställe, Log userid ska ju kopplas ihop med rätt User userid, om ni förstår hur jag menar

Medlem sedan maj 20012 237 inlägg
#5

Loopa, lägg till manuellt...

Medlem sedan jan. 20051 130 inlägg
#6

Hmm, ok. Kan någon ge mitt ett förslag på hur detta kan göras?

Medlem sedan juni 200813 inlägg
#7

Gjorde ett försök och tycker det verkar funka bra...

$user = array( 
    0 => array(  
        "userid" => 1, 
        "username" => "test1", 
        "password" => "hejhej" 
        ),  
     1 => array(  
        "userid" => 2,  
        "username" => "test1",  
        "password" => "hejhej" 
        ) 
    ); 
                     
                     
$log = array( 
     0 => array( 
        "logid" => 1, 
        "userid" => 2,  
        "date" => "2008-02-02" 
        ),  
     1 => array( 
        "logid" => 2, 
        "userid" => 1,  
        "date" => "2008-01-01" 
        ) 
    );  
                     
function array_push_assoc($array, $key, $value){ 
  $array[$key] = $value; 
  return $array; 
} 

foreach($log as $logkey => $logentry) { 
  foreach($user as $userkey => $userentry) { 
    if($logentry["userid"] == $userentry["userid"]) { 
      $user[$userkey] = array_push_assoc($userentry, "log", $logentry["date"]); 
    } 
  } 
} 

echo "<pre>"; 
print_r($user); 
echo "</pre>";
Medlem sedan jan. 20051 130 inlägg
#8

Ok, tack. Ska prova.

Fler förslag?

Medlem sedan apr. 2006409 inlägg
#9

Varifrån kommer dina arrayer? Kan du inte vara lite smartare när du skapar dem? Koden ger inga felmeddelanden eller varningar ifall arrayerna inte är lika långa eller om de inte finns matchningar på varenda nyckel.
ngised: Ibland är det bra med räknare. Här kan man låta dem slå två flugor i samma smäll.

for ($i = 0; $i < count($User); $i++)
{
	for($j = 0; $j < count($Log); $j++)
	{
		if($User[$i]['userid'] == $Log[$j]['userid'])
		{
			$User[$i]['log'] = $Log[$j]['date'];
		}
	}
}

echo "<pre>";
print_r($User);
echo "</pre>";
262 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
131 ms — hämta forumlista (db)
128 ms — hämta statistik (db)
127 ms — hämta tråd, inlägg och bilagor (db)