Fjerne ting fra array

kongen

kongemedlem
Jeg har denne arrayen

Kode:
Array (
   [0] => Array ( 
      [produkt] => pc 
      [type] => laptop 
      ) 
   [1] => Array ( 
      [produkt] => pc 
      [type] => stasjonær 
      ) 
   [2] => Array ( 
      [produkt] => pc 
      [type] => laptop 
      ) 
   [3] => Array ( 
      [produkt] => mac 
      [type] => laptop 
      ) 
   [4] => Array ( 
      [produkt] => mac 
      [type] => laptop 
      ) 
)

og ønsker å fjerne alle deler i arrayen hvor [produkt] allerede har en tidligere forekomst, slik at den ferdige arrayen blir

Kode:
Array (
   [0] => Array ( 
      [produkt] => pc 
      [type] => laptop 
      ) 
   [1] => Array ( 
      [produkt] => mac 
      [type] => laptop 
      ) 
)

hva må jeg gjøre?
 

xdex

Medlem
Du kan gjøre dette ved å loopè gjennom ett array som har alle produktene (som ditt første eksempel). Når du looper gjennom alle disse produktene, lager du en ny array, som inneholder alle produktene som finnes. Hvis produktet allerede ligger i arrayen, hopper du bare over dette, og fortsetter.

if [key] and "value" exsist = continue, else: [insert] => "value"
 

kongen

kongemedlem
Ser du feilen i koden, den virker ikke

Kode:
$array = den store arrayen

$array2 = array();
foreach ($array as $key=>$value) {
foreach ($array2 as $key2=>$value2) {
if (!in_array($value['produkt'], $array2)){
$array2[] = array('produkt'=>$value['produkt'],'type'=>$value['type']);
}
}
}

har også prøve "isset" istedenfor "in_array" uten at det hjalp
 
Sist redigert:

xdex

Medlem
Lagde noe kjapt ved å loggføre key som allerede er brukt, for å vise deg at det finnes mange veier å gå her. Dette er sikkert ikke den mest effektive måten, men det fungerer for ditt formål. Ikke like dynamisk, og det er forbeholdt at strukturen er den samme. Prinsippet kan uansett utnyttes på flere måter, ved å for eksempel sjekke om key og value er brukt før.

http://ideone.com/op822f

Kode:
<?php

// Simple function to remove duplicates by key search in multidimensional array
function keepFirstRemoveDuplicates($array,$key_search)
{

    $tracking_keywords = array();
    $sorted_products = array();

    foreach ($array as $key => $value) :

        $key_itself = $value[$key_search]; // = PC or MAC

        // Check if the key has already been used
        if(!in_array($key_itself,$tracking_keywords))
            $sorted_products[] = array( 'product' => $value['produkt'], 'type' => $value['type'] );

        // Insert all used key's to avoid duplicates in a new array
        $tracking_keywords[] = $key_itself;

    endforeach;

    return $sorted_products; // Returns an array

}

// The complete product list
$products = [
    ['produkt' => 'pc', 'type' => 'laptop1'],
    ['produkt' => 'pc', 'type' => 'stasjonær'],
    ['produkt' => 'pc', 'type' => 'laptop'],
    ['produkt' => 'pc', 'type' => 'screen'],
    ['produkt' => 'mac', 'type' => 'laptop1'],
    ['produkt' => 'mac', 'type' => 'laptop'],
    ['produkt' => 'mac', 'type' => 'screen']
];

// Sorted products
$sorted_products = keepFirstRemoveDuplicates($products,'produkt');

// Clean listing output
echo "<pre>";
print_r($sorted_products);
echo "</pre>";
 

xdex

Medlem
:edit:

Klokka er snart 4, og det er det ikke rart feil forekommer. Ovennevnt kode vil fungere, men jeg er sikker på at du vil finne feilen(e) som er gjort veldig raskt ;) (se til if strukturen som legger til ting i ny array, og bruker "produkt, type" osv.
 

kongen

kongemedlem
Takk for svar :) Din kode fungerer.

Fungerer in_array kun på vanlige arrays? Sånn array uten en $key men bare verdier?
 

xdex

Medlem
Takk for svar :) Din kode fungerer.

Fungerer in_array kun på vanlige arrays? Sånn array uten en $key men bare verdier?

in_array fungerer ikke i multidimensional array, altså en array inni array.

Koden fungerer fordi koden ble utviklet med tanke på ditt eksempel. Blir array innholdet annerledes (nytt navn på keys f.eks) må du gjøre endringer.
 
Topp