PHP для цикла повлияет на скорость загрузки страницы? - PullRequest
1 голос
/ 26 января 2010
$categories = array("google","adobe","microsoft","exoot","yahoo");
$sql='google,exoot,adobe';//from mysql_query
$categs = explode(",",$sql);

for($x=0;$x<count($categs);$x++){
    for($y=0;$y<count($categories);$y++){
        if($categs[$x] == $categories[$y]){
            $str .= $y.",";
        }
    }
}

echo str; // 0,3,1,

Будет ли этот код влиять на время отображения страницы? Могу ли я сделать это, используя другие быстрые методы?

Заранее спасибо.

Ответы [ 5 ]

2 голосов
/ 26 января 2010
$str = implode(',', array_keys(array_intersect($categories, $categs)));
0 голосов
/ 26 января 2010
<code>$arrCategories = array("google","adobe","microsoft","exoot","yahoo");
$sql='google,exoot,adobe';//from mysql_query
$arrCategs = explode(",",$sql);
$arrAns = array();

for($i = 0, $intCnt = count($arrCategs); $i <= $intCnt; $i++) {
    if(in_array($arrCategs[$i],$arrCategories)) {
        $arrAns[$arrCategs[$i]] = array_search($arrCategs[$i], $arrCategories);
    }
}

print "<pre>";
print_r($arrAns);
print "
";
0 голосов
/ 26 января 2010

да, так как вы делаете цикл в цикле.

Лучше всего проверить в массиве:

$categories = array("google","adobe","microsoft","exoot","yahoo");
$sql='google,exoot,adobe';//from mysql_query
$categs = explode(",",$sql);
$str = array();

foreach($categs as $id => $categs_check)
{
    if(in_array($categs_check, $categories))
    {
        //its better to put it into a array and explode it on a later point if you need it with comma.
        $str[] = $id;
    }
}

Я не совсем уверен, что вы пытаетесь сделатьно это должно быть что-то вроде выше

0 голосов
/ 26 января 2010

Я не думаю, что str_replace - более быстрый метод, чем все функции массива, но другое возможное решение:

$categories = array("google","adobe","microsoft","exoot","yahoo");
$sql='google,exoot,adobe';//from mysql_query

foreach($categories as $i=> $c) {
     $sql = str_replace($c, $i, $sql);   
}
0 голосов
/ 26 января 2010

Вы можете использовать array_intersect(), чтобы найти общие элементы, а затем использовать implode(), чтобы создать список через запятую:

Str = implode(',', array_intersect($categories, $categs)) . ',';

Если вы не имеете дело с большим количеством элементов (тысяч), это не повлияет на скорость страницы. Одна проблема заключается в том, что это пересечение O (n 2 ). Размещение значений в ключах может значительно ускорить его, поскольку это меняет время поиска с O (n) до почти O (1), делая всю операцию O (n).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...