php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.11.2011, 19:48  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 109
PHP-Kenntnisse:
Anfänger
Dreamwatcher befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] index 0 von einem zurückgegebenen array ansprechen

Hi,

ich kriege es grade nicht hin, dass ich von einer funktion, die ein Array zurückgibt, den Wert von Index 0 abrufen kann.

PHP-Code:
function foo()
{
return array(
1,2,3,45);

Was muss ich nun schreiben, damit ich direkt die 1 bekomme?
Ich habe folgendes probiert, aber es will nicht...

PHP-Code:
echo foo()[0];
echo ${
foo()}[0]; 
Wie macht man es richtig?
Dreamwatcher ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 09.11.2011, 20:02  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Return-Interaktion bei Methoden und Funktionen gibt es in PHP nur in Verbindung mit Objekte die zurückgegeben werden, du musst den Return andernfalls auslagern:

PHP-Code:
function foo () {
   return array(
1,2,3,45);
}

$a foo();
echo 
$a[0]; 
Oder Objekt-Wrapper nutzen, die Arrays repräsentieren:

PHP-Code:
function foo() {
   return new 
ArrayObject(array(1,2,3,45));
}

echo 
foo()->offsetGet(0); 
Die du allerdings auch als "normale Arrays" nutzen kannst:

PHP-Code:
function foo() {
   return new 
ArrayObject(array(1,2,3,45));
}

$a foo();
echo 
$a[0]; 
( ungetestet, aber mein Erinnerungsvermögen dieser Workarrounds sollte noch zutreffen, ist SPL ( Standard PHP Library ), die Anmerkung von Chriz ist ein super Wink für die Zukunft. )
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (09.11.2011 um 20:15 Uhr).
tr0y ist gerade online   Mit Zitat antworten
Alt 09.11.2011, 20:06  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,

das geht soweit ich weiß erst ab PHP 5.4. Bis dahin musst du den Rückgabewert von foo() in einer Variable zwischenspeichern und dann per Index 0 darauf zugreifen.

https://wiki.php.net/rfc/functionarraydereferencing
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 09.11.2011, 20:16  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 109
PHP-Kenntnisse:
Anfänger
Dreamwatcher befindet sich auf einem aufstrebenden Ast
Standard

hmm okay. Sehr unverständlich, wenn man öfter andere OOP Sprachen schreibt^^

@tr0y:
Wo ist denn jetzt aber wieder für PHP der Unterschied zwischen:
PHP-Code:
function foo()
{
    return new 
ArrayObject(array(1,2,3,45));
}
echo 
foo()->offsetGet(0); 
und
PHP-Code:
echo new ArrayObject(foo())->offsetGet(0); 
Das macht doch keinen Sinn, dass er das eine annimmt und das andere verweigert...
Dreamwatcher ist offline   Mit Zitat antworten
Alt 09.11.2011, 20:20  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Das Schlüsselwort new erzeugt eine Klasseninstanz, kein Referenz-Objekt, das passiert erst nach dem anlegen der Variable / Property / Array-Therm in der Symboltabelle.

PHP-Code:
class myArray extends ArrayObject {
   public static function 
factory( array $array ) { return new myArray($array); }
}

echo 
myArray::factory(array('a','b'))->offsetGet(0); 
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (09.11.2011 um 20:25 Uhr).
tr0y ist gerade online   Mit Zitat antworten
Alt 09.11.2011, 20:28  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

off-topic:
schlechtes Beispiel für den ternary operator
PHP-Code:
function foo(){
  return array(
1,2,3,45);
}
echo (
$a=foo())? $a[0] :"foo() ist leer"
jspit ist offline   Mit Zitat antworten
Alt 09.11.2011, 20:29  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
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

Bisher leider mit einem Strict error verbunden:

PHP-Code:
<?php


function foo()
  {
  return array(
41,2,3,45);
  }

// Spezialfälle  
echo reset (foo());
echo 
array_shift (foo());

// beliebiges Indexe
echo reset (array_slice (foo() , 1));
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 09.11.2011, 20:32  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von jspit Beitrag anzeigen
off-topic:
schlechtes Beispiel für den ternary operator
PHP-Code:
function foo(){
  return array(
1,2,3,45);
}
echo (
$a=foo())? $a[0] :"foo() ist leer"
Auja, Pärförmänz-Gulli:

PHP-Code:
echo ( list ( $that ) = array(1,2,3,4,5) ) ? $that $that
Hauptsache es läuft :P
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist gerade online   Mit Zitat antworten
Alt 09.11.2011, 20:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
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


PHP-Code:
$v foo() and print $v[0]; 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 09.11.2011, 20:46  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 109
PHP-Kenntnisse:
Anfänger
Dreamwatcher befindet sich auf einem aufstrebenden Ast
Standard

okay das geht langsam in die falsche richtung

Ich kam auf das Thema eigentlich auch wieder nur, weil ich mir überlegt hatte, wie ich jedes Element eines maximal 2-Dimensionalen Arrays bearbeiten kann ohne den Index zu wissen. Nachdem ich es dann mit der foreach Schleife gelöst hatte:
PHP-Code:
$array0 = array(
            array(
1,2,3,4),
            array(
5,6,7,8,9)
            );
        foreach (
$array0 as $key1 => &$array1)
        {
            if(
is_array($array1))
                foreach(
$array1 as $key2 => $array2)
                    
$array1[$key2] = "'".$array2."'";
            else
                
$array0[$key1] = "'".$array1."'";
        }
        
print_r($array0); 
(absichtlich keine Rekursion, falls mir das gleich wer Vorschlagen will^^ Ich kann Stack Overflows nicht mehr sehen, auch wenn das bei einem max. 2-Dimensionalen Array eig nicht passieren kann :P)

sollte nun mal die Lösung mit der for Schleife her (was ja leider gescheitert ist ):
PHP-Code:
$columns array_keys($data[0]);
        
$values $data;
        for(
$i=0;$i<count($columns);$i++)
            
$columns[$i] = '`'.$columns[$i].'`';
        for(
$i=0;$i<count($values);$i++)
        {
            
print_r( ${array_keys($values)}[0]);
            
$row = &$values[${array_keys($values)}[$i]];
            for(
$i2=0;$i2<count($row);$i2++)
                
$row[${array_keys($row)}[$i2]] = "'".$row[${array_keys($row)}[$i2]]."'";
        } 
Aber okay...
Gibt es Vorschläge zur Performanceverbesserung für die foreach-Variante?
Dreamwatcher ist offline   Mit Zitat antworten
Antwort


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
Array werte zusammen rechnen fabi288 PHP Einsteiger 13 03.01.2011 16:08
Feed in Datenbank eintragen (Formate: json, php serialized, xml) high_five Datenbanken 5 17.06.2010 03:04
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
PHPLot von der Datenbank zum mehrdimensionalen Array mannimammut PHP Tipps 2009 1 15.12.2009 10:40
merge Array? tommy_725 PHP Tipps 2009 3 07.08.2009 18:30
[Erledigt] Tabellen die sich selbst referenzieren Squall PHP Tipps 2009 19 04.08.2009 21:33
Array index updaten obi PHP Tipps 2008 4 28.11.2007 15:08
Index vom Array zurücksetzen kampfnickel PHP Tipps 2007 6 08.01.2007 17:24
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
[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 funktion rückgabwert array index, php return array function, mehrere indizes von array ansprechen php

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:23 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