2013-10-01 2 views
0

Я пытаюсь найти строку в массиве, а затем вернуть индекс и проверить этот индекс в другом массиве, чтобы увидеть, совпадает ли он (я ищу открытые времена и совпадение совпадений в массивах соответственно).Найти индекс элемента в массиве в PHP

Строка может появляться более одного раза в $openList, и она не должна останавливать проверку, пока не найдет пару совпадающих времен как в $openList, так и в $closeList. array_search находит только первое событие, поэтому мне трудно создать цикл, который работает и эффективен (я буду запускать это несколько раз с разными значениями поиска).

До сих пор, у меня есть что-то вроде:

$openList = array("10:00", "9:00", "10:15", "9:00", "2:30"); 
$closeList = array("2:15", "5:30", "10:30", "10:00", "3:00"); 

$found_key = false; 
while (($key = array_search("9:00", $openList)) !== NULL) { 
    if ($closeList[$key] == "10:00") { 
    $found_key = true; 
    echo "found it at position ".$key; 
    break; 
    } 
} 
if (!$found_key) echo "time doesn't exist"; 

Как я могу это исправить эффективным образом?

+4

вы должны смотреть на '' array_key_exists' –

+0

array_key_exists' ищет ключи, а не содержание самого массива. Я ищу что-то, что ищет массив и возвращает позицию, в которой он находится. 'array_keys', как предлагает @David Nguyen, - лучшая функция. – CMH

ответ

0

Ваш текущий цикл будет работать вечно, если нет в списке нет "9:00". Вместо этого используйте цикл Еогеасп смотреть через $openList массив:

foreach ($openList as $startTimeKey => $startTimeValue) 
{ 
    //Found our start time 
    if ($startTimeKey === "9:00" && isset($closeList[ $startTimeValue ]) && $closeList[ $startTimeValue ] === "10:00") 
    { 
     $found_key = true; 
     break; 
    } 
} 
0

Спасибо за подсказку, чтобы посмотреть на array_keys @David Нгуен. Это похоже на работу:

$openList = array("10:00", "9:00", "10:15", "9:00", "2:30"); 
$closeList = array("2:15", "5:30", "10:30", "10:00", "3:00"); 

$found_key = false; 
foreach (array_keys($openList, "9:00") AS $key) { 
    if ($closeList[$key] == "10:00") { 
    $found_key = true; 
    echo "found it at position ".$key; 
    break; 
    } 
} 
if (!$found_key) echo "time doesn't exist"; 
+0

Если мой комментарий помог вам решить проблему, не стесняйтесь отмечать мой ответ как решение, чтобы закрыть вопрос :) –

Смежные вопросы