2013-09-10 3 views
0

У меня есть два массива: один с большим набором URL-адресов, а другой с идентификаторами поиска. Каждый из URL-путей имеет один уникальный идентификатор. По идентификатору поиска нам нужно найти самый длинный URL с уникальным идентификатором. Вот мой код, я объясню немного позже.Найти наибольшее значение массива из заданного поиска.

<?php 

     function searchstring($search, $array) { 

     foreach($array as $key => $value) { 

      if (stristr($value, $search)) { 

    echo $value; 

    } 
     } 
     return false; 
     } 
$array = array(
"D:\winwamp\www\info\961507\Good_Luck_Charlie", 
"D:\winwamp\www\info\961507\Good_Luck_Charlie\season_1", 
"D:\winwamp\www\info\961507\Good_Luck_Charlie\season_1\episode_3", 
"D:\winwamp\www\info\961507\Good_Luck_Charlie\season_1\episode_3\The_Curious_Case_of_Mr._Dabney", 
"D:\winwamp\www\info\961506\Good_Luck_Charl", 
"D:\winwamp\www\info\961506\Good_Luck_Charlie\season_1", 
"D:\winwamp\www\info\961506\Good_Luck_Charlie\season_1\episode_1", 
"D:\winwamp\www\info\961506\Good_Luck_Charlie\season_1\episode_1\Study_Date"); 

$searchValues = array("961507","961506"); 

foreach($searchValues as $searchValue) { 

    $result = searchstring($searchValue, $array); 
} 
?> 

Это дает значение всех совпадающих идентификаторов. Теперь, если вы видите мой массив, есть четыре набора URL-путей. То, что я хочу, что если я ищу с «961507» он должен дать:

"D:\winwamp\www\info\961507\Good_Luck_Charlie\season_1\episode_3\The_Curious_Case_of_Mr._Dabney" 

Если я искать с «961506», он должен дать:

"D:\winwamp\www\info\961506\Good_Luck_Charlie\season_1\episode_1\Study_Date" 

Теперь то, что я получаю это все массивы, которые совпадали с моим идентификатором. Не могли бы вы помочь мне узнать, как я могу это сделать? Потому что у меня есть более 98000 URL-адресов для сортировки.

+0

"все массивы" или "всех элементов массива"? Потому что я вижу только один массив $ $ – crush

+2

. Это хорошее место для использования [usort] (http://php.net/manual/en/function.usort.php), и вы можете добавить свои правила в обратный вызов – Ibu

ответ

1

Изменение функции, как

function searchstring($search, $array) { 
    $length = 0; 
    $result = ""; 
    foreach($array as $key => $value) { 

     if (stristr($value, $search)) { 
      if($length < strlen($value)) { 
       $length = strlen($value); 
       $result = $value; 
      } 
     } 
    } 
    return $result; 
} 

Для печати использовать значение:

foreach($searchValues as $searchValue) { 

    $result = searchstring($searchValue, $array); 

    echo $result; 

} 

Или

$result = array(); 
foreach($searchValues as $searchValue) { 

    $result[] = searchstring($searchValue, $array); 

} 

print_r($result); 
+0

спасибо, что я хотел, но возврат не печатает ничего, что я должен был повторить, это проблема? –

+1

Ответ отредактирован, так как вы прокомментировали это. – Salim

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