2016-05-19 1 views
-1

J'ai un produit de $ array:Tableau clé comme numéro

Array 
(
    [0] => Array 
     (
      [id] => 2488 
      [va] => 1526 
     ) 

    [1] => Array 
     (
      [id] => 19512 
      [va] => 286 
     ) 
    [2] => Array 
     (
      [id] => 123 
      [va] => 286 
     ) 
); 

Maintenant Je dois construire une deuxième matrice clé => valeur où:

key => [va] 
value => frequency of key in the first array 

Ainsi, la sortie sera:

array(1526 => 1, 286 => 2) 

J'ai essayé:

$test = array(); 

foreach($products as $product) { 
    $va = $product['va']; 
    $test["$va"]++; 
} 

De cette façon, je reçois beaucoup de "décalage non défini", comment puis-je utiliser un nombre comme clé de tableau associatif?

+3

coller votre sortie désir. – RJParikh

+0

Vous devez d'abord définir une valeur avant de pouvoir l'incrémenter. Sans que votre ligne '$ test [" $ va "] ++;' essaie d'incrémenter une valeur non existante à chaque exécution. – arkascha

+0

J'ai collé ma sortie désirée, qu'en est-il de downvote? – Jumpa

Répondre

2

Vous devez d'abord définir une valeur avant de pouvoir l'incrémenter. Sans cela, votre ligne $ test ["$ va"] ++; essaie d'incrémenter une valeur non existante à chaque exécution. Un essai avec cette approche modifiée:

<?php 

$products = [ 
    [ 'id' => 2488, 'va' => 1526 ], 
    [ 'id' => 19510, 'va' => 286 ], 
    [ 'id' => 19511, 'va' => 286 ], 
    [ 'id' => 19512, 'va' => 286 ], 
]; 

$test = []; 
foreach($products as $product) { 
    $va = $product['va']; 
    $test[$va] = isset($test[$va]) ? ++$test[$va] : 1; 
} 

var_dump($test); 

La sortie est évidemment:

array(2) { 
    [1526] => 
    int(1) 
    [286] => 
    int(3) 
} 
+0

J'ai essayé d'ajouter un nouveau produit avec va "286" et la sortie pour cette touche est toujours 1. Je viens de remarquer que votre code fonctionne en utilisant "+ 1" et non "++", se demandant pourquoi ... – Jumpa

+0

code ne fonctionne pas pour cela $ products = [ 0 => ['id' => 2488, 'va' => 1526], 1 => ['id' => 19512, 'va' => 286], \t 2 => ['id' => 19562, 'va' => 286] ]; –

+0

@Jumpa Désolé, résolu le problème évident. Ma faute. Vous avez évidemment besoin de pré-incement avant la cession. – arkascha

0

Vous devez vérifier si les clés est existe ou non, sinon alors la valeur définie comme 1, comme ci-dessous Utilisez

$test = array(); 

foreach($products as $product) { 
    $va = $product['va']; 
    if(isset($test["$va"])) 
    { 
     $test["$va"]++; 
    } 
    else 
    { 
     $test["$va"]=1; 
    } 
} 
1

solution "ligne" à l'aide array_column et array_count_values fonctions:

// $products is your initial array 
$va_count = array_count_values(array_column($products, 'va')); 

print_r($va_count); 

La sortie:

(
    [1526] => 1 
    [286] => 2 
)