dpxnrx11199 2012-06-15 16:24
浏览 43

array_push性能

I have a php file that connects to a DB and grabs some resources for me.

On the while loop I'm appending the data to a php array. Finally, json_encode is used with this resulting array.

For now, I'm using array_push, but for the number of times it is called, the script is extremely slow! I've tried to change to "[]" to append to the last element but I haven't noticed any change on performance.

My question is: Is there a better method (and a lot faster!). I've tried also with array_splice and array_merge, but without luck,

Edit: By commenting the array_push part (but accessing the same number of rows and times) the script is fast. So, this leads me to think that the bottleneck is in the push.

Edit2:

The code

    $Tema=-1;
    $SubTema=-1;
    $Topico=-1;
    $SubTopico=-1;
    $RS = mysql_query($SQL);
    $respArray['items'] = array();
    $resLevel=-1;
    $UniqueKey=1;

    $TemaId = '';
    $TemaOpen = '';
    $TemaActivo = '';
    $TemaIsRecurso = '';
    $TemaTipoRecurso = '';

    $SubtemaId = '';
    $SubtemaOpen = '';
    $SubtemaActivo = '';
    $SubtemaIsRecurso = '';
    $SubtemaTipoRecurso = '';

    $TopicoId = '';
    $TopicoOpen = '';
    $TopicoActivo = '';
    $TopicoIsRecurso = '';
    $TopicoTipoRecurso = '';

    $SubtopicoId = '';
    $SubtopicoOpen = '';
    $SubtopicoIsRecurso = '';
    $SubtopicoTipoRecurso = '';

    while($row = mysql_fetch_array($RS))   
    {

        if(!is_null($row['IDTEMA'])){
            if($Tema!=$row['IDTEMA']){
                $TemaId = $row['IDTEMA'];
                $TemaOpen = '1';
                $TemaActivo = $row['MACTIVO'];
                $TemaTitle = $row['TEMA'];
                $TemaIsRecurso = '0';
                $TemaTipoRecurso = '';

                $Tema=$row['IDTEMA'];
                $SubTema=-1;

                $respArray['items'][] = array ('Id' => $TemaId, 'isRecurso' => '0', 'Level' => '1', 'Title' => $TemaTitle, 'UniqueKey' => $UniqueKey++, 'children_items' => array() );
                continue;
                //array_push($respArray['items'], array ('Id' => $TemaId, 'isRecurso' => '0', 'Level' => '1', 'Title' => $TemaTitle, 'UniqueKey' => $UniqueKey++, 'children_items' => array() ));
                //echo("TEMA ".$TemaTitle."
");
            }

            if($row['IDSUBTEMA']!=""){
                if($SubTema!=$row['IDSUBTEMA']){
                    $SubtemaId = $row['IDSUBTEMA'];
                    $SubtemaOpen = '1';
                    $SubtemaActivo = $row['MACTIVO'];
                    $SubtemaTitle = $row['SUBTEMA'];
                    $SubtemaIsRecurso = '0';
                    $SubtemaTipoRecurso = '';

                    $SubTema=$row['IDSUBTEMA'];
                    $Topico=-1;


                    $numTemas = count($respArray['items'])-1;
                    $respArray['items'][$numTemas]['children_items'][] = array ('Id' => $SubtemaId, 'isRecurso' => '0', 'Level' => '2', 'Title' => $SubtemaTitle, 'UniqueKey' => $UniqueKey++, 'children_items' => array() );
                    continue;
                }

                if($row['IDTOPICO']!=""){
                    if($Topico!=$row['IDTOPICO']){
                        $TopicoId = $row['IDTOPICO'];
                        $TopicoOpen = '1';
                        $TopicoActivo = $row['MACTIVO'];
                        $TopicoTitle = $row['TOPICO'];
                        $TopicoIsRecurso = '0';
                        $TopicoTipoRecurso = '';

                        $Topico=$row['IDTOPICO'];
                        $SubTopico=-1;

                        $numTemas = count($respArray['items'])-1;
                        $numSubTemas = count($respArray['items'][$numTemas]['children_items'])-1;
                        $respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'][] = array ('Id' => $TopicoId, 'isRecurso' => '0', 'Level' => '3', 'Title' => $TopicoTitle, 'UniqueKey' => $UniqueKey++, 'children_items' => array() );
                        continue;
                    }

                    if($row['IDSUBTOPICO']!=""){
                        if($SubTopico!=$row['IDSUBTOPICO']){
                            $SubtopicoId = $row['IDTOPICO'];
                            $SubtopicoOpen = '1';
                            $SubtopicoActivo = $row['MACTIVO'];
                            $SubtopicoTitle = $row['SUBTOPICO'];
                            $SubtopicoIsRecurso = '0';
                            $SubtopicoTipoRecurso = '';

                            $SubTopico=$row['IDSUBTOPICO'];

                            $numTemas = count($respArray['items'])-1;
                            $numSubTemas = count($respArray['items'][$numTemas]['children_items'])-1;
                            $numTopicos = count($respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'])-1;
                            $respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'][$numTopicos]['children_items'][] = array ('Id' => $SubtopicoId, 'Level' => '4', 'isRecurso' => '0', 'Title' => $SubtopicoTitle, 'UniqueKey' => $UniqueKey++, 'children_items' => array() );
                            continue;
                        }
                        if($row['IDRECURSO']!=""){

                            $resId = $row['IDRECURSO'];
                            $resLevel = '5';
                            $resFic = ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PUBSEC) ? $row['FICSRC'] . "$" . $row['FICVOL'] : ((($row['IDCATEGORIA']==$BD->ID_CATEGORIA_LINKS) || ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PAGINAS)) ? $row['FICSRC'] : $row['FICHEIRO']);
                            $resIcon = $row['ICON'];
                            $resCat = $row['IDCATEGORIA'];
                            $resFormato =  $row['IDFORMATO'];
                            $resProf = (($row['IDDESTINATARIO']==3) || ($row['IDDESTINATARIO']==4)) ?  1 : 0;
                            $resInfo = $row['INFORMACAO'];
                            $resDown = $row['GRAVACAO'];
                            $resFicD = $row['FICDOWNLOAD'];
                            $resGuia = $row['GUIA'];
                            $resVol = $row['VOLUME'];
                            $resIdFavorito = $row['IDFAVORITO'];
                            $resActivo = $row['MACTIVO'];
                            $resTempoGasto = $row['TEMPOGASTO'];
                            $resNumSessoes = $row['NUMSESSOES'];
                            $resLastDate = $row['LASTDATE'];
                            $resScore = $row['SCORE'];
                            $resProgresso = $row['PROGRESSO'];
                            $resTitle = utf8_encode($row['RECURSO']);
                            $resIsRecurso = '1';

                            $numTemas = count($respArray['items'])-1;
                            $numSubTemas = count($respArray['items'][$numTemas]['children_items'])-1;
                            $numTopicos = count($respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'])-1;
                            $numSubTopicos = count($respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'][$numTopicos]['children_items'])-1;

                            $respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'][$numTopicos]['children_items'][$numSubTopicos]['children_items'][] = array (
                                    'Id' => $resId, 
                                    'Level' => $resLevel,
                                    'Fic' => $resFic,
                                    "Icon" => $resIcon,
                                    "Cat" => $resCat,
                                    "Formato" => $resFormato,
                                    "Prof" => $resProf,
                                    "Info" => $resInfo,
                                    "Down" => $resDown,
                                    "FicD" => $resFicD,
                                    "Guia" => $resGuia,
                                    "Vol" => $resVol,
                                    "IdFavorito" => $resIdFavorito,
                                    "Activo" => $resActivo,
                                    "TempoGasto" => $resTempoGasto,
                                    "NumSessoes" => $resNumSessoes,
                                    "LastDate" => $resLastDate,
                                    "Score" => $resScore,
                                    "Progresso" => $resProgresso,
                                    'Title' => $resTitle,
                                    'isRecurso' => '1',
                                    'colorIcon' => '#FF2200',
                                    'tipoRecurso' => 'tipo_recurso',
                                    'UniqueKey' => $UniqueKey++,
                                    'children_items' => null );
                                    continue;

                        }

                    }else{
                        if($row['IDRECURSO']!=""){
                            $resId = $row['IDRECURSO'];
                            $resLevel = '4';
                            $resFic = ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PUBSEC) ? $row['FICSRC'] . "$" . $row['FICVOL'] : ((($row['IDCATEGORIA']==$BD->ID_CATEGORIA_LINKS) || ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PAGINAS)) ? $row['FICSRC'] : $row['FICHEIRO']);
                            $resIcon = $row['ICON'];
                            $resCat = $row['IDCATEGORIA'];
                            $resFormato =  $row['IDFORMATO'];
                            $resProf = (($row['IDDESTINATARIO']==3) || ($row['IDDESTINATARIO']==4)) ?  1 : 0;
                            $resInfo = $row['INFORMACAO'];
                            $resDown = $row['GRAVACAO'];
                            $resFicD = $row['FICDOWNLOAD'];
                            $resGuia = $row['GUIA'];
                            $resVol = $row['VOLUME'];
                            $resIdFavorito = $row['IDFAVORITO'];
                            $resActivo = $row['MACTIVO'];
                            $resTempoGasto = $row['TEMPOGASTO'];
                            $resNumSessoes = $row['NUMSESSOES'];
                            $resLastDate = $row['LASTDATE'];
                            $resScore = $row['SCORE'];
                            $resProgresso = $row['PROGRESSO'];
                            $resTitle = utf8_encode($row['RECURSO']);
                            $resIsRecurso = '1';

                            $numTemas = count($respArray['items'])-1;
                            $numSubTemas = count($respArray['items'][$numTemas]['children_items'])-1;
                            $numTopicos = count($respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'])-1;

                            $respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'][$numTopicos]['children_items'][] = array (
                                    'Id' => $resId, 
                                    'Level' => $resLevel,
                                    'Fic' => $resFic,
                                    "Icon" => $resIcon,
                                    "Cat" => $resCat,
                                    "Formato" => $resFormato,
                                    "Prof" => $resProf,
                                    "Info" => $resInfo,
                                    "Down" => $resDown,
                                    "FicD" => $resFicD,
                                    "Guia" => $resGuia,
                                    "Vol" => $resVol,
                                    "IdFavorito" => $resIdFavorito,
                                    "Activo" => $resActivo,
                                    "TempoGasto" => $resTempoGasto,
                                    "NumSessoes" => $resNumSessoes,
                                    "LastDate" => $resLastDate,
                                    "Score" => $resScore,
                                    "Progresso" => $resProgresso,
                                    'Title' => $resTitle,
                                    'isRecurso' => '1',
                                    'colorIcon' => '#FF2200',
                                    'tipoRecurso' => 'tipo_recurso',
                                    'UniqueKey' => $UniqueKey++,
                                    'children_items' => null );
                                    continue;
                        }
                    }



                }else{
                    if($row['IDRECURSO']!="" && $row['IDSUBTEMA']!=""){
                        $resId = $row['IDRECURSO'];
                        $resLevel = '3';
                        $resFic = ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PUBSEC) ? $row['FICSRC'] . "$" . $row['FICVOL'] : ((($row['IDCATEGORIA']==$BD->ID_CATEGORIA_LINKS) || ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PAGINAS)) ? $row['FICSRC'] : $row['FICHEIRO']);
                        $resIcon = $row['ICON'];
                        $resCat = $row['IDCATEGORIA'];
                        $resFormato =  $row['IDFORMATO'];
                        $resProf = (($row['IDDESTINATARIO']==3) || ($row['IDDESTINATARIO']==4)) ?  1 : 0;
                        $resInfo = $row['INFORMACAO'];
                        $resDown = $row['GRAVACAO'];
                        $resFicD = $row['FICDOWNLOAD'];
                        $resGuia = $row['GUIA'];
                        $resVol = $row['VOLUME'];
                        $resIdFavorito = $row['IDFAVORITO'];
                        $resActivo = $row['MACTIVO'];
                        $resTempoGasto = $row['TEMPOGASTO'];
                        $resNumSessoes = $row['NUMSESSOES'];
                        $resLastDate = $row['LASTDATE'];
                        $resScore = $row['SCORE'];
                        $resProgresso = $row['PROGRESSO'];
                        $resTitle = utf8_encode($row['RECURSO']);
                        $resIsRecurso = '1';

                        $numTemas = count($respArray['items'])-1;
                        $numSubTemas = count($respArray['items'][$numTemas]['children_items'])-1;

                        $respArray['items'][$numTemas]['children_items'][$numSubTemas]['children_items'][] = array (
                                'Id' => $resId, 
                                'Level' => $resLevel,
                                'Fic' => $resFic,
                                "Icon" => $resIcon,
                                "Cat" => $resCat,
                                "Formato" => $resFormato,
                                "Prof" => $resProf,
                                "Info" => $resInfo,
                                "Down" => $resDown,
                                "FicD" => $resFicD,
                                "Guia" => $resGuia,
                                "Vol" => $resVol,
                                "IdFavorito" => $resIdFavorito,
                                "Activo" => $resActivo,
                                "TempoGasto" => $resTempoGasto,
                                "NumSessoes" => $resNumSessoes,
                                "LastDate" => $resLastDate,
                                "Score" => $resScore,
                                "Progresso" => $resProgresso,
                                'Title' => $resTitle,
                                'isRecurso' => '1',
                                'colorIcon' => '#FF2200',
                                'tipoRecurso' => 'tipo_recurso',
                                'UniqueKey' => $UniqueKey++,
                                'children_items' => null );
                                continue;
                    }
                }

            }else{

                if($row['IDRECURSO']!=""){
                    $resId = $row['IDRECURSO'];
                    $resLevel = '2';
                    $resFic = ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PUBSEC) ? $row['FICSRC'] . "$" . $row['FICVOL'] : ((($row['IDCATEGORIA']==$BD->ID_CATEGORIA_LINKS) || ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PAGINAS)) ? $row['FICSRC'] : $row['FICHEIRO']);
                    $resIcon = $row['ICON'];
                    $resCat = $row['IDCATEGORIA'];
                    $resFormato =  $row['IDFORMATO'];
                    $resProf = (($row['IDDESTINATARIO']==3) || ($row['IDDESTINATARIO']==4)) ?  1 : 0;
                    $resInfo = $row['INFORMACAO'];
                    $resDown = $row['GRAVACAO'];
                    $resFicD = $row['FICDOWNLOAD'];
                    $resGuia = $row['GUIA'];
                    $resVol = $row['VOLUME'];
                    $resIdFavorito = $row['IDFAVORITO'];
                    $resActivo = $row['MACTIVO'];
                    $resTempoGasto = $row['TEMPOGASTO'];
                    $resNumSessoes = $row['NUMSESSOES'];
                    $resLastDate = $row['LASTDATE'];
                    $resScore = $row['SCORE'];
                    $resProgresso = $row['PROGRESSO'];
                    $resTitle = utf8_encode($row['RECURSO']);
                    $resIsRecurso = '1';

                    $numTemas = count($respArray['items'])-1;

                    $respArray['items'][$numTemas]['children_items'][] = array (
                        'Id' => $resId, 
                        'Level' => $resLevel,
                        'Fic' => $resFic,
                        "Icon" => $resIcon,
                        "Cat" => $resCat,
                        "Formato" => $resFormato,
                        "Prof" => $resProf,
                        "Info" => $resInfo,
                        "Down" => $resDown,
                        "FicD" => $resFicD,
                        "Guia" => $resGuia,
                        "Vol" => $resVol,
                        "IdFavorito" => $resIdFavorito,
                        "Activo" => $resActivo,
                        "TempoGasto" => $resTempoGasto,
                        "NumSessoes" => $resNumSessoes,
                        "LastDate" => $resLastDate,
                        "Score" => $resScore,
                        "Progresso" => $resProgresso,
                        'Title' => $resTitle,
                        'isRecurso' => '1',
                        'colorIcon' => '#FF2200',
                        'tipoRecurso' => 'tipo_recurso',
                        'UniqueKey' => $UniqueKey++,
                        'children_items' => null );
                        continue;
                } 

            }


        }else{
            if($row['IDRECURSO']!=""){
                $resId = $row['IDRECURSO'];
                $resLevel = '1';
                $resFic = ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PUBSEC) ? $row['FICSRC'] . "$" . $row['FICVOL'] : ((($row['IDCATEGORIA']==$BD->ID_CATEGORIA_LINKS) || ($row['IDCATEGORIA']==$BD->ID_CATEGORIA_PAGINAS)) ? $row['FICSRC'] : $row['FICHEIRO']);
                $resIcon = $row['ICON'];
                $resCat = $row['IDCATEGORIA'];
                $resFormato =  $row['IDFORMATO'];
                $resProf = (($row['IDDESTINATARIO']==3) || ($row['IDDESTINATARIO']==4)) ?  1 : 0;
                $resInfo = $row['INFORMACAO'];
                $resDown = $row['GRAVACAO'];
                $resFicD = $row['FICDOWNLOAD'];
                $resGuia = $row['GUIA'];
                $resVol = $row['VOLUME'];
                $resIdFavorito = $row['IDFAVORITO'];
                $resActivo = $row['MACTIVO'];
                $resTempoGasto = $row['TEMPOGASTO'];
                $resNumSessoes = $row['NUMSESSOES'];
                $resLastDate = $row['LASTDATE'];
                $resScore = $row['SCORE'];
                $resProgresso = $row['PROGRESSO'];
                $resTitle = utf8_encode($row['RECURSO']);
                $resIsRecurso = '1';

                $respArray['data']['items'][] = array (
                        "Id" => $resId,
                        'Level' => $resLevel,
                        "Fic" => $resFic,
                        "Icon" => $resIcon,
                        "Cat" => $resCat,
                        "Formato" => $resFormato,
                        "Prof" => $resProf,
                        "Info" => $resInfo,
                        "Down" => $resDown,
                        "FicD" => $resFicD,
                        "Guia" => $resGuia,
                        "Vol" => $resVol,
                        "IdFavorito" => $resIdFavorito,
                        "Activo" => $resActivo,
                        "TempoGasto" => $resTempoGasto,
                        "NumSessoes" => $resNumSessoes,
                        "LastDate" => $resLastDate,
                        "Score" => $resScore,
                        "Progresso" => $resProgresso,
                        'Title' => $resTitle,
                        'isRecurso' => '1',
                        'colorIcon' => '#FF2200',
                        'tipoRecurso' => 'tipo_recurso',
                        'UniqueKey' => $UniqueKey++,
                        'children_items' => null );
                        continue;

            }
        }
    }

    mysql_close($link);

    echo json_encode($respArray) ;
} 

Thank you

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
    • ¥30 深度学习,前后端连接
    • ¥15 孟德尔随机化结果不一致
    • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
    • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
    • ¥15 谁有desed数据集呀
    • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
    • ¥15 关于#hadoop#的问题
    • ¥15 (标签-Python|关键词-socket)
    • ¥15 keil里为什么main.c定义的函数在it.c调用不了