2014-04-23 3 views
0

Я попытался использовать пользовательскую функцию usort funciton. когда я загрузил 5 ячеек массива, это заработало более 30 секунд, а затем выбросило фатальную ошибку.Сортировка массива многомерных измерений с использованием usort не удалась

Я попытался найти, был ли я сделан бесконечным циклом, но не основал его.

массива:

Array ([0] => Array ([Name] => iPhone 5s 32 GB [Price] => 0 [Description] => A new Apple Product [Image_URL] => [Business_ID] => 6 [Keywords] => ["iPhone","iPhone 5s","Apple","32 GB"]) [1] => Array ([Name] => iPhone 4s 32 G [Price] => 300 [Description] => Apple iPhone 4S [Image_URL] => [Business_ID] => 6 [Keywords] => ["iPhone 4S","iPhone","Apple","32 GB"])) 

поиск:

$searchTerm = "iphone 5s"; 

Код:

if (!empty($searchTerm)) { 
    $searchTermWords = explode(" ", $searchTerm); 
    usort($products, function($a, $b) use ($searchTermWords) { 

     $aArr = explode(" ", $a['Name']); 
     $bArr = explode(" ", $b['Name']); 

     $aKeywords = $a['Keywords']; 
     $bKeywords = $b['Keywords']; 
     //todo: explode description too. 

     $aCount = 0; 
     $bCount = 0; 

     for ($i = 0; $i < $searchTermWords; $i++) { 
      for ($j = 0; $j < $aKeywords; $j++) { 
       if (strpos($aKeywords[$j], $searchTermWords[$i]) !== false) 
        $aCount++; 
      } 
      for ($j = 0; $j < $aArr; $j++) { 
       if ($aArr[$j] == $searchTermWords[$i]) 
        $aCount++; 
      } 
      for ($j = 0; $j < $bKeywords; $j++) { 
       if (strpos($bKeywords[$j], $searchTermWords[$i]) !== false) 
        $bCount++; 
      } 
      for ($j = 0; $j < $bArr; $j++) { 
       if ($bArr[$j] == $searchTermWords[$i]) 
        $bCount++; 
      } 
     } 

     return $bCount - $aCount; 
    }); 
} 

Ошибка (после 30 секунд):

Fatal error: Maximum execution time of 30 seconds exceeded in /home/itay/public_html/tester.php(30) : eval()'d code on line 94 

Если это ошибка, то почему-то все сделано из функции eval().

+0

Что должно получиться после сортировки массива? – AbraCadaver

+0

Собственно, это конкретный случай, точно так же, как он был дан. – Itay

ответ

0

Вы получаете Неустранимая ошибка, потому что ваш скрипт не подходит правильно. Существует цикл For, который работает бесконечно.

Ваши петли for() проверяются на самих элементах, а не на количестве элементов. Вы пытаетесь создать цикл для числа элементов в массиве? Если это так, попробуйте использовать count($array) для возврата количества элементов в массиве. Затем используйте этот счетчик для цикла, используя foreach.

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