Problem mit array_multisort()

Problem mit array_multisort()

am 02.11.2006 15:00:09 von Armin Aki

Hallo zusammen,

ich habe ein kleines Problem mit dem Umgang mit einem array.
Der Code vorab....

$datei_SM=3Dfopen($online_SM,"r");
$groesse_SM=3Dfilesize($online_SM);
$data_SM=3Dfgetcsv($datei_SM,$groesse_SM,$trenner);


while($data_SM!=3Dfalse) {
if (($sek_seit70-$data_SM[1] < $sessionlaenge) && ($data_SM[0]!=3D"")) {

$SM_online[] =3D array(
"name_nic"=3D>"$data_SM[0]",
"name_userid"=3D>"$data_SM[6]",
"name_geschl"=3D>"$data_SM[7]",
"chat_mod"=3D>"$data_SM[8]"
);
}
$data_SM=3Dfgetcsv($datei_SM,$groesse_SM,$trenner);
}
fclose($datei_SM);

// Funktionsaufruf Doppelte Einträge entfernen
$SM_online =3D array_unique2($SM_online);

//Bereinigte Einträge für Room onlineliste zählen
$SM_user =3D count($SM_online);

if ($SM_user=="") $user_SM=3D0;
else $user_SM =3D count($SM_online);

// User Alphabetisch sortieren für die Ausgabe
if($SM_user >0) {
foreach($SM_online as $val) $s[] =3D $val[name_nic];
array_multisort($s, SORT_ASC, $SM_online);
}


Das verblüffende ist nun, das ich ab und an eine Fehlermeldung erhalte
:

Warning: array_multisort(): Array sizes are inconsistent in ....
onlinereloader.php on line 178

Zeile 178 ist die Zeile mit der Anweisung
array_multisort($s, SORT_ASC, $SM_online);

Ich verstehe nur nicht warum dieser Fehler nur ab und zu auftritt.
Die Datei onlinereloader.php ist eine User onlineliste, die sich alle 3
Sekunen reloadet.
Der Inhalt des Array kommt aus einer .csv Datei

Kann mir vielleicht jemand weiterhelfen ??

Bin dankbar für jeden Tip

Grüße
Armin

Re: Problem mit array_multisort()

am 02.11.2006 17:58:41 von Sven Drieling

Armin Aki wrote:

Hallo,

> Warning: array_multisort(): Array sizes are inconsistent in ....
> onlinereloader.php on line 178
>=20
> Zeile 178 ist die Zeile mit der Anweisung
> array_multisort($s, SORT_ASC, $SM_online);
>=20
> Ich verstehe nur nicht warum dieser Fehler nur ab und zu auftritt.
> Die Datei onlinereloader.php ist eine User onlineliste, die sich alle=
3
> Sekunen reloadet.

Den kompletten Quelltext verstehe ich auf die schnelle nicht.=20
=20
Der Fehler tritt auf, weil $s und $SM_online unterschiedlich viele
Elemente enthalten. Das klingt nach einer Race Condition, weil sich
der Dateiinhalt zwischen dem ersten und zweiten Einlesen verändert h=
at
oder es hat was mit dem Reduzieren per array_unique() zu tun.

12.12. Was sind Race Conditions? Wie kann ich sie vermeiden?
http://www.php-faq.de/q/q-race-condition.ht


> $s[] =3D $val[name_nic];

Führt bei error_reporting(E_ALL) zu einer Notice-Meldung und muss da=
her
als $val['name_nic']; geschrieben werden.


tschuess
[|8:)
--=20
PHP: preg_match() mit Treffern als assoziatives Array
http://www.sven-drieling.de/diary/2006/10/26/PHP_PregMatchNa mes.html