Avatar billede truthorn Nybegynder
21. januar 2003 - 15:39 Der er 5 kommentarer

sortering/filtrering i associativt array

Hvordan kan jeg filtrere i et associativt array?

f.eks.

navnene: "Hans, Peter, Gurun"
slet: = "0, 1, 0"
// 0=eksisterer, 1=slettet

Nu vil jeg gerne have sortere dem, der er slettet fra i listen - hvordan gør jeg det?

Dvs....jeg har det egentlig således:

$obj[$i][navn] (navnene)
$obj[$i][slet] (0/1 - tallerne)
Avatar billede jakoba Nybegynder
21. januar 2003 - 16:26 #1
Prøv at forklare lidt mere, jeg fatter hverken hvad du har eller hvad du vil :-))
Avatar billede angam Nybegynder
21. januar 2003 - 16:29 #2
Hvis jeg har forstået opgaven rigtigt, skulle nedenstående virke:

$tmp = array();
$index = 0;
for($n=0;$n<sizeof($obj);
  $record = $obj[$n];
  if(!$record[1]) $tmp[$index++] = $record;
}
$obj = $tmp;
Avatar billede angam Nybegynder
21. januar 2003 - 16:31 #3
.. hvor $record[0] = navn og $record[1] = svar.
Avatar billede angam Nybegynder
21. januar 2003 - 16:39 #4
.. du får lige et helt eksempel: (der var en fejl i for-løkken)
Nedenstående er testet & virker:


<?
$obj = array(
        array('hans', 0),
        array('ole', 1),
        array('gurli', 0)
    );

$tmp = array();
$index = 0;
for($n=0;$n<sizeof($obj);$n++) {
  $record = $obj[$n];
  if(!$record[1]) $tmp[$index++] = $record;
}
$obj = $tmp;

//  Test output:
for($n=0;$n<sizeof($obj);$n++) {
  echo($obj[$n][0] .'<br>');
}

?>
Avatar billede tipsen Nybegynder
21. januar 2003 - 16:58 #5
Et eksempel, hvor der bruges den indbyggede array-filtreringsfunktion array_filter() (http://dk.php.net/manual/en/function.array-filter.php) og sorteres på key i arrayet. Bemærk at strukturen af arrayet er tilpasset, så det kan bruges sammen med array-filter() og callback funktionerne.

<?php
//hjælpefunktioner til array-filter()
function slettet($tmp) {
    return $tmp;
}

function eksisterer($tmp) {
    return !$tmp;
}

//arrayet der skal filtreres og efterfølgende sorteres.
$array1 = array (
    "Hans" => 1,
    "Ole" => 0,
    "Gurli" => 1,
    "Karen" => 0,
    "Bent" => 0,
);

//Slettede personer:
echo "Slettede:";
$tmparray = array_filter($array1, "slettet");
ksort($tmparray, SORT_STRING);
print_r($tmparray);

//Ikke slettede personer:
echo "<br>Eksisterer:";
$tmparray = array_filter($array1, "eksisterer");
ksort($tmparray, SORT_STRING);
print_r($tmparray);

//slet midlertidig array-variabel - den er nødvendig, da ksort arbejder direkte på arrayet.
unset($tmparray);

?>
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