phpbar.de logo

Mailinglisten-Archive

[php] maximale Schluessellaenge bei Arrays

[php] maximale Schluessellaenge bei Arrays

Sebastian Mendel lists at sebastianmendel.de
Son Dez 2 09:54:29 CET 2007


Hallo Norbert,

Sebastian Mendel schrieb:
> Norbert Pfeiffer schrieb:
>> Hallo Sebastian,
>>
>>>> in meinem Fall verwende ich die Keys dazu um in einer Liste keine
>>>> Dubletten zuzulassen. Das Array wird anschliessend geflippt und
>>>> in eine Datei geschrieben - im Prinzip also einmalig ...
>>> wäre da nicht http://php.net/array_unique die passendere Funktion?
>> hmm,
>> mein Bauch sagt nein - aber schaun mer mal:
>>
>> Test 1 einlesen von 557.654 Zeilen nach    7.562,162 ms beendet
>>                  das sind 38 MB
>> Test 2 einlesen, in Array schreiben und mit array_unique behandeln
>>                  nach 3.804 Zeilen und    13.930,604 ms beendet
>>                  abzueglich des Einlesens  6.368,442 ms
>> Test 3 einlesen, als Key in Array schreiben und flippen
>>                  nach 3.804 Zeilen und     9.161,861 ms beendet
>>                  abzueglich des Einlesens  1.599,699 ms
>>
>> Es ist also, wie erwartet deutlich besser, gleich zu vereinzeln
>> als am Ende mit den knapp 40 MB herum zu jonglieren.
> 
> mhm ... ich hab jetzt mal eine 50 MiB SQL Datei genommen, Ermangelung
> anderer Daten:
> 
> <?php
> $file = 'test.txt';
> 
> $time = microtime(true);
> $data = file($file);
> echo "\nEinlesen: " . (microtime(true) - $time);
> echo "\nZeilen: " . count($data);
> echo "\nSpeicher: " . number_format(memory_get_usage());
> 
> $time = microtime(true);
> $data2 = array_unique($data);
> echo "\narray_unique(): " . (microtime(true) - $time);
> echo "\nZeilen: " . count($data2);
> echo "\nSpeicher: " . number_format(memory_get_usage());
> ?>
> 
> Einlesen: 0.30585479736328
> Zeilen: 135829
> Speicher: 64,451,768
> 
> array_unique(): 0.44579601287842
> Zeilen: 132766
> Speicher: 71,938,416

oder hatte ich was falsch verstanden?

-- 
Sebastian

php::bar PHP Wiki   -   Listenarchive