2014-02-14 3 views
1

Я хочу вернуть индекс массива. Я пытаюсь ниже следующий но не работает:Поиск массива для возврата индекса длинной строки

$os = array("Helo how are you","I am you"); 

foreach ($os as $oss) { 
    if(strpos($oss, 'you') !== false) { 
     $reference= array_search('you', $oss); 
     echo $reference;  
    } 
} 

Я хотел бы, чтобы ссылка на эхо 0, 1. учитывая, что я искал слово «вы», и это происходит в 0, 1. Является ли массив искать одну строку? Что можно сделать для поиска во всей подстроке?

+0

Не могли бы вы привести пример своего rray? –

+0

Вы используете array_search на $ oss, который не является массивом – ElefantPhace

+1

. Вы получили свой ответ ниже, но, возможно, вместо того, чтобы извлекать ключевые индексы, было бы лучше использовать [array_filter] (http://il1.php.net) /manual/en/function.array-filter.php), чтобы уменьшить массив до нового массива, содержащего только согласованные элементы. Таким образом, ключи/индексы не будут важны, и ваш код может быть более четким. Просто мысль. – yoavmatchulsky

ответ

3

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

foreach ($os as $reference => $oss) 
{ 
    if(strpos($oss, 'you') !== false) { 
     echo $reference, PHP_EOL; 
    } 
} 

Выход:

0 
1 

Demo

+0

Более функциональный подход: 'echo implode ('', array_keys (array_filter ($ os, function ($ elem) { return (strpos ($ elem, 'you')! == FALSE); }))); '---' 0 1'. –

-2

Попробуйте изменить Еогеасп петля к этому:

foreach ($os as $index => $oss) 
{ 
    if(strpos($oss, 'you') !== false) { 
     $reference= array_search('you', $oss); 
     echo $index;  
    } 
} 
+0

'array_search()' здесь не требуется (не мой нисходящий) –

+0

Я не знал, нужен ли он ему для чего-то еще, поэтому я его сохранил. – steinmas

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