Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] plik z tablica 600 elementową.. jak przyspieszyc działanie?, cache w pamięci serwera??
kukix
post
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam.

Mam tablice wygladającą w ten sposób:
Kod
<?
$category=array (
'1_383' =>
array(
'name' => 'Anteny pokojowe',
),
'1_540' =>
array(
'name' => 'Baterie, akumulatory, ładowarki',
'elements' =>
array (
'540_519' => 'Akumulatory',
'540_520' => 'Baterie',
'540_522' => 'Ładowarki akumulatorowe',
),
),
'1_531' =>
array(
'name' => 'Car Audio-Video',
'elements' =>
array (
'531_375' => 'Gło&para;niki samochodowe - do zabudowy',
'531_376' => 'Gło&para;niki samochodowe - kolumny',
'531_382' => 'Samochodowe Akcesoria',
'531_379' => 'Samochodowe radioodtwarzacze',
'531_380' => 'Samochodowe radioodtwarzacze Video',
'531_381' => 'Samochodowe wzmacniacze',
),
),
);


w tablicy tej występuje ponad 600 różnych pól.

Zastanawioam sie, czy można jakoś przyspieszyc operacje na tej tablicy.
Głównie korzystam z foreach() i dalej różne warunki..

Slyszalem, że można zrobic cache tej tablicy w pamięci serwera..
Tablica ta jest praktycznie cały czas niezmienna.. cały czas to samo..

prosze o podpowiedź.
Bede bardzo wdzięczny za wszelką pomoc.

Ten post edytował kukix 20.03.2008, 23:49:13
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kukix
post
Post #2





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Dzieki chłopaki za odpowiedzi.
No wlaśnie to jest już tablica, którą includuje.
Dane pobieram z bazy sql przerabiam dużym skryptem igeneruje taką tablice, zapisuje ją do pliku.

Skoro foreach laduje jeszcze raz do pamięci to moze wykorzystac do tego " while (list($item,$key) = each($elements)) { }" ?


Jeżeli chodzi o serialize i unserialize to nie rozumie do końca działania tej funkcji. Domyslam sie , że serialize ładuje do pamięci a unserialize czysci pamiec. Tylko to chyba nie o to chodzi. Operacja na tablicy jest przy każdym wywołaniu strony wykonywana tylko raz. tak więc nie ma sensu robic serialize i unserialize jak skrypt tylko raz wykonuje operaxcje na skrypcie. Chodzi mi bardziej o cos takiego jak jest przy sql'u. tzn żeby serwer trzymał tablice w pamieci dla nastepnego wykonania skryptu. chociaż teraz tak sobie mysle, że to raczej niemozliwe.


oto moj kod pracujący na tej tablicy:

Kod
function gen_menu($param_zakladka='', $param_kategoria='') {
  $kod_html='';
  include('include/kategorie.php');
  $q=0;
  if (is_array(@$category)) {
    reset($category);
    foreach ($category as $id=>$n_category){

      $name=$n_category['name'];
      $elements=@$n_category['elements'];
      if (!empty($param_zakladka)) {
        if (!empty($param_kategoria)) { //wyświetlamy tylko z tej kategorii i zakladki
          $param = $param_zakladka.'_'.$param_kategoria;
          if ($id == $param) {
            print ($name.'<br>');
            ////f (is_array(@$elements)) { narazie tak
            //  gen_submenu($elements,1);
            //}
          }
        } else { //wyswietlamy tylko z tej zakladki
          $param = $param_zakladka.'_';
          if (strpos($id, $param) !== false) {
            //print ($name.'<br>');
            $q++;//potrzebne do kodu html
            $kod_html .= gen_menu_html($param_zakladka,$id,$name,$param_kategoria,$q);
          }
        }
      } else { //wyswietlamy wszystkie
        if (!empty($param_kategoria)) { //wyświetlamy tylko z tej kategorii
          $param = '_'.$param_kategoria;
          if (strpos($id, $param) !== false) {
           // print ($name.'<br>');narazie
           // if (is_array(@$elements)) {
           //   gen_submenu($elements,1);
            //}
          }
        } else {
          //print ($name.'<br>');
         // if (is_array(@$elements)) {//narazie
         //   gen_submenu($elements,1);
         // }
        }
      }
    }
  }

  return $kod_html;
}



function gen_submenu($elements=array(),$level) {
        
  while (list($item,$key) = each($elements)) {
    
    if (is_array($item)) {
      // dany element jest drzewem
      $id=key($item);
      $name=$item[$id]['name'];
      $new_elements=$item[$id]['elements'];
      $level++;
      
      $name=addslashes($name);
      
      gen_submenu($new_elements,$level);
      $level--;
    } else {
      // dany element jest lisciem
      $kat_name=$key;                
      $kat_id=$item;
      
      //print('<font color="red">  '.$kat_name.' </font><BR>');  
      $id=$item;
      
    }
  } // end while

  return(0);
}



dzieki wielkie za odpowiedzi.

Ten post edytował kukix 21.03.2008, 19:33:48
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 08:26