В PHP, когда у вас есть ассоциативный массив, например:
$groups['paragraph'] = 3 $groups['line'] = 3
Каков синтаксис доступа к первому или второму элементу массива, когда вы не знаете значения ключей ?
Есть ли что-то вроде в инструкции C # LINQ, где вы можете сказать:
$mostFrequentGroup = $groups->first()?
или
$mostFrequentGroup = $groups->getElementWithIndex(0)?
Или мне нужно использовать оператор foreach и выбирать их, как в нижней части этого примера кода:
//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; }
используйте эти функции для установки указателя внутреннего массива:
http://ch.php.net/manual/en/function.reset.php
http://ch.php.net/manual/en/function.end.php
И этот, чтобы получить фактический элемент: 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
Если вы хотите иметь последний / первый ключ, просто сделайте что-то вроде $tmp = array_keys($groups);
,
$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);
ИЛИ
$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);
РЕДАКТИРОВАТЬ
Предполагает $ pos = 1 для первого элемента, но легко изменить для $ pos = 0, изменив ссылки $ pos-1 в функциях на $ pos