Я попытался использовать пользовательскую функцию 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().
Что должно получиться после сортировки массива? – AbraCadaver
Собственно, это конкретный случай, точно так же, как он был дан. – Itay