2010-11-24 2 views
0

J'ai 2 tableaux en PHP qui ressemblent quelque chose comme ceci:Comment compter le nombre d'occurrences dans un tableau à partir des valeurs d'un second tableau en PHP?

$rows = array(11,12,14,14,11,13,12,11); 
$cols = array(1,2,1,2,2,2,1,1); 

je besoin de combiner ces tableaux d'une manière qui indique le nombre de chaque valeur $cols est dans chaque valeur $rows.

Donc, mon résultat devrait ressembler à ceci:

Array 
(
    [0] => Array 
     (
      [row] => 11 
      [1] => 2 //the count of 1 cols for 11 
      [2] => 1 //the count of 2 cols for 11 
     ) 

    [1] => Array 
     (
      [row] => 12 
      [1] => 1 
      [2] => 1 
     ) 

    ... 
) 

Les valeurs des lignes $ et changeront en fonction de l'entrée des utilisateurs $ Col., ils peuvent même être des chaînes.

Précision:

Les valeurs de doublons proviennent des données. Pensez aux résultats de l'enquête ou aux questions d'essai. Donc, la question 11 avait 2 personnes et 1 réponse 1 personne réponse 2.

Question:

Comment puis-je compter le nombre d'occurrences de $ en lignes Col. de $ et ajouter les résultats dans un tableau multidimensionnel?

Répondre

0

Je l'ai compris. Ce n'était pas aussi compliqué que je le pensais. Juste besoin d'une fonction pour calculer la somme. Peut-être il pourrait être plus efficace, j'aimerais des idées à ce sujet, mais la voici:

$rowColumns = array(); 

      for($i=0;$i<=$count-1;$i++) 
      { 
       $currentRow = $rows[$i]; 
       $currentCol = $cols[$i]; 

       //count occurences of columns in row 
       $colSum = $this->getColumnOccurences($count,$rows,$cols,$currentRow,$currentCol); 

       $rowColumns[$currentRow][$currentCol] = $colSum; 
      } 

private function getColumnOccurences($count,$rows,$cols,$rowValue,$colValue) 
    { 
     $retValue = 0; 

     for($i=0;$i<=$count-1;$i++) 
     { 
      if($rows[$i] == $rowValue && $cols[$i] == $colValue) 
      { 
       $retValue = $retValue + 1; 
      } 
     } 

     return $retValue; 
    } 

Le résultat est:

Array ( 
     [11] => Array ([1] => 2 [2] => 1) 
     [12] => Array ([1] => 1 [2] => 1) 
     [13] => Array ([2] => 1) 
     [14] => Array ([1] => 1 [2] => 1) 
    ) 
1

Découvrez array_intersect(). Utilisez-le pour obtenir des valeurs identiques et faites un count() sur le tableau résultant.

+0

oui! et puis comptez que – Tobias

+0

-1 Cela ne fait pas ce dont j'ai besoin. Les valeurs des deux tableaux sont liées par ordre et non par valeurs. Cela retournerait un tableau vide. –

Questions connexes