[PHP] in arrays data zoeken a la "GROUP BY" *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Arjan A
  • Registratie: November 2000
  • Laatst online: 12:24

Arjan A

Cenosillicafoob

Topicstarter
Topictitel moest zijn: [PHP, arrays] data zoeken a la "GROUP BY"

Ik heb een array waarin weer andere arrays staan.
PHP:
1
2
3
4
5
6
$test = Array(
Array("Pietje", "X"),
Array("Puk", "X"),
Array("Pluk", "Y"),
Array("Petteflet","Y")
);


Zoals je ziet is de tweede entry van de geneste arrays steeds een "X" of een "Y".
Nou wil ik graag weten welke waarden in de tweede entry voorkomen, en voor elke waarde dat één keer zien, het liefst in een nieuwe array.
Die array zou er dan (in dit geval) zo uit komen te zien:
PHP:
1
$nieuweArray=Array("X","Y");

Nu kan ik de array $test wel zelf gaan nalopen om te achterhalen welke entries er zijn, maar is er geen simpeler manier (dmv een PHP-functie, of een combinatie daarvan waaraan ik nog niet heb gedacht) om dit te doen?

[ Voor 15% gewijzigd door Arjan A op 11-06-2004 00:57 . Reden: topictitel verduidelijkt ]

Canon EOS | DJI M2P
Fotoblog · Mijn werk aan jouw muur


Acties:
  • 0 Henk 'm!

Verwijderd

Even de docs lezen en dan kom je snel op:
$newarray = array_unique(array_values($oldarray));

-oops, niet de geneste array's gezien... eh
OK, een nieuwe poging:
PHP:
1
2
3
4
5
(...)
$newarray = array_unique(array_map("extract_array", $test));
function extract_array($a) {
  return $a[1];
}

[ Voor 53% gewijzigd door Verwijderd op 11-06-2004 09:01 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Arjan A schreef op 11 juni 2004 @ 00:55:

Nu kan ik de array $test wel zelf gaan nalopen om te achterhalen welke entries er zijn, maar is er geen simpeler manier (dmv een PHP-functie, of een combinatie daarvan waaraan ik nog niet heb gedacht) om dit te doen?
Nee. Ookal zou er een functie voor zijn, dan nog zou deze alle entries bij langs moeten gaan. Alleen waneer je je orginele datatype aanpast zou er een efficientere methode gebruikt kunnen worden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Mag ik vragen waarom je dit gebruikt:
PHP:
1
2
3
4
5
6
$test = Array(
Array("Pietje", "X"),
Array("Puk", "X"),
Array("Pluk", "Y"),
Array("Petteflet","Y")
);


In plaats van dit:
PHP:
1
2
3
4
5
6
$test = Array(
  "Pietje" => "X",
  "Puk" => "X",
  "Pluk" => "Y",
  "Petteflet","Y"
);


Met de laatste methode kun je array_key_exists (geloof ik) gebruiken:
PHP:
1
2
if (!array_key_exists($test["Pietje"]))
  //toevoegen

'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!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

NMe84 schreef op 11 juni 2004 @ 09:44:
Mag ik vragen waarom je dit gebruikt:

In plaats van dit:


Met de laatste methode kun je array_key_exists (geloof ik) gebruiken:
PHP:
1
2
if (!array_key_exists($test["Pietje"]))
  //toevoegen
Dat maakt op zich niet zoveel uit, hoe de begin-array is opgebouwd. Je moet dan ook loopen over alle keys. :)

code:
1
2
3
4
5
6
7
8
$groupByArray = Array();

Voor elke $test als $key =>$waarde
   Is $waarde een array en bestaat $waarde[1]?
        Bestaat $waarde[1] nog niet in $groupByArray?
              push $waarde[1] op $groupByArray

// Eventueel hier $groupByArray sorteren

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

En nu de superkorte oplossing:
PHP:
1
$newarray = array_unique(array_map(create_function('$a', 'return $a[1];'), $test));

Acties:
  • 0 Henk 'm!

  • Arjan A
  • Registratie: November 2000
  • Laatst online: 12:24

Arjan A

Cenosillicafoob

Topicstarter
Verwijderd schreef op 11 juni 2004 @ 10:26:
En nu de superkorte oplossing:
PHP:
1
$newarray = array_unique(array_map(create_function('$a', 'return $a[1];'), $test));
Waarvoor hartelijk dank _/-\o_
(* Arjan A moet zich toch eens meer verdiepen in de array_map-functie,
totaal over het hoofd gezien Afbeeldingslocatie: http://forum.hadrian.net/images/bloos.gif
)

Canon EOS | DJI M2P
Fotoblog · Mijn werk aan jouw muur

Pagina: 1