php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.02.2007, 19:54  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Prüfen auf numerischen Array

Hi,
sagt mal gibt es noch eine elegantere Lösung zu prüfen, ob ein Array nur numerische Indexe (bei 0 beginnende) besitzt als:

PHP-Code:
<?php
$aIrgendeinArray 
= array( /* what ever */ );
$aKeys array_keys($aIrgendeinArray);
return 
count(array_diff($aKeysrange(0count($aKeys) - 1))) == 0;
?>
In Worten: nehme die Schlüssel des Arrays und vergleiche sie mit einem neu erzeugten Array der selben Länge. Gibt es keine Differenz ist der Original-Array numerisch.

Ist die Funktion überhaupt korrekt?! Gibts etwas "richtigereres"?
Zergling-new ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.02.2007, 20:05  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Oh, das Problem hab ich auch des öfteren.
Wie wärs damit:
PHP-Code:
return ($array === array_values ($array)); 
, erkennt aber nur numerische Arrays, die mit 0 beginnen...
wahrscheinlich ists schneller als die Array-Elemente (Schlüssel) zu durchlaufen und mit is_numeric() zu prüfen? Wäre ja mal zu testen, was durchschnittlich (inkl. vorzeitigem Schleifenabbruch) die bessere Performance bietet.
nikosch ist gerade online  
Alt 28.02.2007, 21:03  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard Re: Prüfen auf numerischen Array

Zitat:
Zitat von Zergling
Ist die Funktion überhaupt korrekt?
Wenn die Indizes auch noch fortlaufend sein müssen, klappt das vermutlich schon. Wenn auch Lücken drin sein dürfen, wohl eher nicht.

Numeriert array_values neu fortlaufend durch oder übernimmt es die Indizes, die numerisch sind?
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 28.02.2007, 21:10  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

nikosch77, deine Lösung ist irgendwie sehr naheliegend, wusste ichs doch ^^
Zergling-new ist offline  
Alt 28.02.2007, 22:44  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

@Der_Gerhard: ersteres.
nikosch ist gerade online  
Alt 28.02.2007, 23:07  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Dann is die variante aber Mist, wenn das array nicht mit 0 beginnt ^^ Ich weiß grad nich genau, ob die numerischen Indizes auch als Integer gelten, aber wenn ja, ginge auch das

PHP-Code:
$keys array_keys($array); // Keys rausziehen
$numKeys array_filter ($keys'is_int'); // Nur keys beachten, die Integer sind
if (count($keys) !== count($numKeys)) { // Gibt es gleichviele Integer-Keys wie überhaupt, sind alle Keys Integer
  // ungleich

Korrigiert Fehler
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 28.02.2007, 23:42  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

interessante variante.
allerdings ist ne einfache foreach schleife selbt im worst case noch schneller. immerhin ne knappe Sekunde bei 1000000 Array Elementen (ich war mal neugierig).
Und im im avarage natürlich noch wesentlich chneller, was ja auch die häufigere Variante sein sollte:
PHP-Code:
function test (& $aArray)
  {
  foreach (
$aArray as $mKey =>$tmp) {
    if (!
is_int($mKey)) return (false);
    }
  return (
true);
  } 
Wichtig ist die Referenz.

PS: @KingCrunch: die Parameter von array_filter müssen ausgetauscht werden.
nikosch ist gerade online  
Alt 01.03.2007, 00:20  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

1. Ja, an foreach dachte ich auch, aber eigentlich hätte ich angenommen, dass es langsamer wäre... Nagut ^^
2. Stimmt
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
Kategoriedaten rekursiv in Array bringen Schiedsrichter PHP Tipps 2008 2 10.12.2007 15:43
ARRAY: alle möglichen Kombinationen Tentacle PHP Tipps 2006 13 12.05.2006 00:18
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array wie auslesen? PHP Tipps 2005 7 07.03.2005 11:43
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array numerisch, numerisches array php, numerischer array php, numerischer array, numerische arrays php, numerische arrays, array key numerisch, array inhalt prüfen numerisch, php numerisches array, php numerischer array, array numerisch, prüfen ob numerisches array, php array key vorhanden prüfen, php array prüfen numerisch, prüfen ob array numerisch, numerisches array durchlaufen php, php numerisch prüfen, php numerische arrays, php count nur numerische, php prüfen auf numerisches array

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.