[PHP] 2 array op header niveau vergelijken?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • sjaakie
  • Registratie: Oktober 2000
  • Niet online

sjaakie

Developer

Topicstarter
Ik heb 2 arrays nu wil ik die gaan vergelijken.

De array's worden gevuld met data uit database,
alleen de kolomvolgorde is niet gelijk, de kolomnamen wel. Nou kan ik natuurlijk gaan zeggen:

code:
1
2
3
if (groepsrecht['nieuws_edit'] <> gebruikersrecht['nieuws_edit']) {
// doe je ding
}


Maar aangezien ik 36 verschillende kolommen heb lijkt dat niet de goede weg om dan 36x een if-then te schrijven.

Omdat de volgorde van de kolommen niet gelijk zijn kan ik niet met indexen werken.
Hoe doe ik deze array's vergelijken?

[ Voor 6% gewijzigd door sjaakie op 14-01-2005 00:09 ]

Als je enige gereedschap een hamer is, ziet elk probleem eruit als een spijker...


Acties:
  • 0 Henk 'm!

Verwijderd

kolomnamen zijn gelijk?

Dan zou ik een array maken met de kolomnamen en die array zou ik dan gebruiken in een 'for' of 'while' functie die de 2 andere arrays met elkaar vergelijkt.

Hoe lijkt je dat?

Watch out for those headcrabs :)

[ Voor 34% gewijzigd door Verwijderd op 14-01-2005 00:13 ]


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

waarom doe je het niet als volgt: foreach waarin je de kolomnaam opvraagt van Array_A, vervolgens die waarde opvraagt bij Array_B, en vergelijkt met waarde A. Simpel toch?
tijdje geen php gedaan, dus syntax is bagger
PHP:
1
2
3
4
foreach $array_A as $naam => $waarde
{
  if ($array_B[$naam] != $waarde) $equal = FALSE;
}


sim-pel :P

Je hebt nu alleen nog het probleem dat array_B wat zooi over kan hebben. Ik heb daar voor mijn stage wat voor verzonnen, maar dat ga ik nu niet opzoeken.
@eristof: waarom zo moeilijk doen? :P ;)

[ Voor 5% gewijzigd door MBV op 14-01-2005 00:15 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik kon het uitleggen zonder de [code] tages. Dus wie doet hier nu moeilijk? 8) Bovendien is je oplossing impliciet gelijk aan die van mij en was ik 4 minuten eerder. :9 Mzl

Acties:
  • 0 Henk 'm!

  • sjaakie
  • Registratie: Oktober 2000
  • Niet online

sjaakie

Developer

Topicstarter
MBV schreef op vrijdag 14 januari 2005 @ 00:14:
waarom doe je het niet als volgt: foreach waarin je de kolomnaam opvraagt van Array_A, vervolgens die waarde opvraagt bij Array_B, en vergelijkt met waarde A. Simpel toch?
tijdje geen php gedaan, dus syntax is bagger
PHP:
1
2
3
4
foreach $array_A as $naam => $waarde
{
  if ($array_B[$naam] != $waarde) $equal = FALSE;
}


sim-pel :P

Je hebt nu alleen nog het probleem dat array_B wat zooi over kan hebben. Ik heb daar voor mijn stage wat voor verzonnen, maar dat ga ik nu niet opzoeken.
@eristof: waarom zo moeilijk doen? :P ;)
Ja inderdaad, alleen hoe kom ik aan die kolomnamen, worden die wel meegenomen als je mysql_fetch_array() en hoe vraag ik die dan op?

Als je enige gereedschap een hamer is, ziet elk probleem eruit als een spijker...


Acties:
  • 0 Henk 'm!

Verwijderd

mysql_fetch_array gebruikt de veldnamen als keys. De veldnamen worden dus ook uit de database opgehaald. Het is echter mogelijk om 2 of meer kolommen in een database dezelfde veldnaam te geven. Pas daar dus mee op.

Wanneer je uitgangspunt een situatie is zonder bekende kolomnamen dan zou mysql_fetch_field een oplossing kunnen bieden en daarmee kun je nog veel meer doen.

Meestal vind ik de gebruikte kolomnamen echter te cryptisch om als output aan de gebruiker weer te geven. Daarom bouw ik meestal toch zelf een array met alternatieve namen...

Van php.net kun je trouwens prima manuals downloaden waarin echt elke functie uitgebreid beschreven staat. Check it out.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Provision schreef op vrijdag 14 januari 2005 @ 00:30:
Ja inderdaad, alleen hoe kom ik aan die kolomnamen, worden die wel meegenomen als je mysql_fetch_array() en hoe vraag ik die dan op?
Gebruik dan mysql_fetch_assoc(), dan heb je in je array dezelfde kolomnamen als in je database. Daarna kun je de oplossing gebruiken die MBV hierboven postte.
Verwijderd schreef op vrijdag 14 januari 2005 @ 00:53:
mysql_fetch_array gebruikt de veldnamen als keys. De veldnamen worden dus ook uit de database opgehaald. Het is echter mogelijk om 2 of meer kolommen in een database dezelfde veldnaam te geven. Pas daar dus mee op.
Om daar even wat meer over te zeggen:
If two or more columns of the result have the same field names, the last column will take precedence. To access the other column(s) of the same name, you either need to access the result with numeric indices by using mysql_fetch_row() or add alias names. See the example at the mysql_fetch_array() description about aliases.

[ Voor 44% gewijzigd door NMe op 14-01-2005 02:43 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • sjaakie
  • Registratie: Oktober 2000
  • Niet online

sjaakie

Developer

Topicstarter
Thnx mannen, hier heb ik wat aan!

Als je enige gereedschap een hamer is, ziet elk probleem eruit als een spijker...

Pagina: 1