2010-10-29 4 views
4

En PHP lorsque vous avez un tableau associatif, .: par exempleComment trouver le premier/deuxième élément du tableau associatif lorsque les clés sont inconnues?

$groups['paragraph'] = 3 
$groups['line'] = 3 

quelle est la syntaxe pour accéder à la première ou deuxième élément du tableau lorsque vous ne connaissez pas la valeur des clés?

Y at-il quelque chose comme dans une déclaration C# LINQ où vous pouvez dire:

$mostFrequentGroup = $groups->first()? 

ou

$mostFrequentGroup = $groups->getElementWithIndex(0)? 

Ou dois-je utiliser une instruction foreach et les choisir comme je le fais à le bas de cet exemple de code:

//should return "paragraph" 
echo getMostFrequentlyOccurringItem(array('line', 'paragraph', 'paragraph')); 

//should return "line" 
echo getMostFrequentlyOccurringItem(array('wholeNumber', 'date', 'date', 'line', 'line', 'line')); 

//should return null 
echo getMostFrequentlyOccurringItem(array('wholeNumber', 'wholeNumber', 'paragraph', 'paragraph')); 

//should return "wholeNumber" 
echo getMostFrequentlyOccurringItem(array('wholeNumber', '', '', '')); 

function getMostFrequentlyOccurringItem($items) { 

    //catch invalid entry 
    if($items == null) { 
     return null; 
    } 
    if(count($items) == 0) { 
     return null; 
    } 

    //sort 
    $groups = array_count_values($items); 
    arsort($groups); 

    //if there was a tie, then return null 
    if($groups[0] == $groups[1]) { //******** HOW TO DO THIS? *********** 
     return null; 
    } 

    //get most frequent 
    $mostFrequentGroup = ''; 
    foreach($groups as $group => $numberOfTimesOccurrred) { 
     if(trim($group) != '') { 
      $mostFrequentGroup = $group; 
      break; 
     } 
    } 
    return $mostFrequentGroup; 
} 

Répondre

10

utilisez ces fonctions pour définir le pointeur de matrice interne:

http://ch.php.net/manual/en/function.reset.php

http://ch.php.net/manual/en/function.end.php

Et celui-ci pour obtenir l'élément réel: http://ch.php.net/manual/en/function.current.php

reset($groups); 
echo current($groups); //the first one 
end($groups); 
echo current($groups); //the last one 

Si vous voulez avoir la dernière/première clé alors fais juste quelque chose comme $tmp = array_keys($groups);.

+2

bien sûr, je peux juste faire $ groupNames = array_keys ($ groups), alors j'ai $ groupNames [0] et $ groupNames [1], merci. –

+0

@Edward ouais, je cherchais trop loin à ce sujet. – joni

3
$array = array('Alpha' => 1.1,'Bravo' => 2.2,'Charlie' => 3.3,'Delta' => 4.4,'Echo' =>5.5, 'Golf' => 6.6); 

$pos = 3; 

function getAtPos($tmpArray,$pos) { 
return array_splice($tmpArray,$pos-1,1); 
} 

$return = getAtPos($array,$pos); 

var_dump($return); 

OU

$array = array('Alpha' => 1.1,'Bravo' => 2.2,'Charlie' => 3.3,'Delta' => 4.4,'Echo' =>5.5, 'Golf' => 6.6); 

$pos = 3; 

function getAtPos($tmpArray,$pos) { 
    $keys = array_keys($tmpArray); 
    return array($keys[$pos-1] => $tmpArray[$keys[$pos-1]]); 
} 

$return = getAtPos($array,$pos); 

var_dump($return); 

EDIT

Suppose $ pos = 1 pour le premier élément, mais facile à changer pour $ pos = 0 en modifiant les références pos-1 $ les fonctions à $ pos

Questions connexes