phpbar.de logo

Mailinglisten-Archive

[php] maximale Schluessellaenge bei Arrays

[php] maximale Schluessellaenge bei Arrays

Sebastian Mendel lists at sebastianmendel.de
Don Nov 29 15:19:29 CET 2007


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

-- 
Sebastian

php::bar PHP Wiki   -   Listenarchive