Нахождение определенного ключа в массиве php - PullRequest
0 голосов
/ 31 января 2012

У меня проблемы с поиском правильного ключа в массиве:

, когда у меня есть массив: $ haystack

$haystack = array(0 => 'apple', 
                  1 => 'apple', 
                  2 => 'pear', 
                  3 => 'apple', 
                  4 => 'banana');

, и я использую функцию array_search

$key = array_search('apple', $haystack);

функция установит значение $ key в '0' ($ key = 0)

Мне нужно найти ключ четвертого элемента в массиве (3), который также является яблочным ...Кто-нибудь знает функцию, которая ищет массив по заданному индексу и возвращает значение?

например что-то вроде:

array_search_start($needle, $haystack, $startPosition);

Ответы [ 8 ]

4 голосов
/ 31 января 2012

Используйте array_keys со вторым параметром, чтобы указать значение для поиска ключей.

$keys = array_keys($haystack, 'apple');

Таким образом, $keys будет содержать массив найденных ключей, соответствующих поисковому значению (apple):

Array
(
    [0] => 0
    [1] => 1
    [2] => 3
)

Теперь вы можете получить последний или первый,и т.д. Если вам нужно последнее:

$key = end($keys);
0 голосов
/ 04 февраля 2012

Это будет так просто в использовании

$haystack = array(0 => 'apple', 
                  1 => 'apple', 
                  2 => 'pear', 
                  3 => 'apple', 
                  4 => 'banana');

$keys = array_keys($haystack,'apple');
foreach($keys as $k):
    $searchK[] = $haystack[$k];
endforeach;

print_r($searchK);
0 голосов
/ 31 января 2012
$haystack = array(0 => 'apple', 
                  1 => 'apple', 
                  2 => 'pear', 
                  3 => 'apple', 
                  4 => 'banana');
$find = 'apple';
foreach ($haystack as $k=>$v) {
    if($find == $v) {
            echo 'found! key is '.$k.'<br />';
            }
}  
0 голосов
/ 31 января 2012
<?

$array = array("one"=>'paul',"two"=>'lady');
print_r(array_values($array));

?>
0 голосов
/ 31 января 2012

Вы можете использовать array_keys, чтобы получить все ключи со значениями apple

$keys = array_keys($haystack, 'apple');

если вам нужно написать как функцию, вы можете сделать:

$searchValue = 'apple';
$keys = searchKeys($haystack, $searchValue);
function searchKeys($haystack,$searchValue) {
     $keys = array_keys($haystack, $searchValue);
     return $keys;
}

Надеюсь, это поможет вам:)

0 голосов
/ 31 января 2012

Не много знаете о PHP, но не могли бы вы просто включить смещение в качестве начальной позиции?

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

Итак, в вашем случае вы бы сделали

$key = array_search('apple', $haystack, 2);
0 голосов
/ 31 января 2012

Вы также можете использовать array_slice, чтобы сделать это проще, чем зацикливание:

<?php
$key = array_search($needle, array_slice($haystack, $startPosition,-1,true));
?>

Этот синтаксис требует PHP> = 5.0.2, так как нам нужно сохранить ключи (отсюда -1 (нетограничение длины) и true, в котором хранятся оригинальные ключи)

0 голосов
/ 31 января 2012

Это должно работать:

<?php
function array_search_start($needle, $haystack, $start) {
  for ($i = $start; $i < length($haystack); $i++)
    if ($haystack[$i] == $needle) return $i;
  return FALSE; // You'll need === operator to distinguish between False and 0
}
?>

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...