kopieren - php aus array entfernen




PHP: Zugriff auf Array Value on the Fly (6)

Das ist vielleicht nicht direkt damit verbunden. Aber ich bin zu diesem Post gekommen, um eine Lösung für dieses spezielle Problem zu finden.

Ich habe ein Ergebnis von einer Funktion in der folgenden Form.

Array
(
    [School] => Array
            (
                [parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a
            )
)

Was ich wollte, war der parent_id Wert "9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a". Ich habe die Funktion so benutzt und verstanden.

array_pop( array_pop( the_function_which_returned_the_above_array() ) )

Also, es wurde in einer Zeile gemacht :) Hope Es wäre hilfreich für jemanden.

In PHP muss ich oft eine Variable mit einem Array abbilden ... aber ich kann nicht in der Lage sein, dies in einem einzigen Liner zu tun. Beispiel:

// the following results in an error:
echo array('a','b','c')[$key];

// this works, using an unnecessary variable:
$variable = array('a','b','c');
echo $variable[$key];

Das ist ein kleines Problem, aber es nervt immer wieder ab ... Ich mag die Tatsache nicht, dass ich eine Variable für nichts verwende;)


Die technische Antwort ist, dass die Grammatik der PHP-Sprache nur eine tiefgestellte Notation am Ende von Variablenausdrücken erlaubt und keine Ausdrücke im Allgemeinen, so wie es in den meisten anderen Sprachen funktioniert. Ich habe es immer als einen Mangel in der Sprache angesehen, weil es möglich ist, eine Grammatik zu haben, die tiefgestellte Zeichen gegen jeden Ausdruck eindeutig löst. Es könnte jedoch der Fall sein, dass sie einen unflexiblen Parsergenerator verwenden oder einfach keine Rückwärtskompatibilität brechen wollen.

Hier sind einige Beispiele für ungültige Indizes für gültige Ausdrücke:

$x = array(1,2,3);
print ($x)[1]; //illegal, on a parenthetical expression, not a variable exp.

function ret($foo) { return $foo; }
echo ret($x)[1]; // illegal, on a call expression, not a variable exp.

Es gibt mehrere oneliner, die Sie mit php array_ * Funktionen verwenden könnten . Aber ich versichere Ihnen, dass es absolut überflüssig ist, zu vergleichen, was Sie erreichen wollen.

Beispiel Sie können etwas wie folgt verwenden, aber es ist keine elegante Lösung und ich bin mir nicht sicher über die Leistung davon;

   array_pop ( array_filter( array_returning_func(), function($key){    return $key=="array_index_you_want"? TRUE:FALSE;    },ARRAY_FILTER_USE_KEY ) );

Wenn Sie ein PHP-Framework verwenden und Sie mit einer älteren Version von PHP festgefahren sind, unterstützen die meisten Frameworks Bibliotheken.

Beispiel: Codeigniter-Array-Helfer


Ich würde mich wirklich nicht um diese zusätzliche Variable kümmern. Wenn Sie möchten, können Sie es auch aus dem Speicher entfernen, nachdem Sie es verwendet haben:

$variable = array('a','b','c');
echo $variable[$key];
unset($variable);

Oder Sie könnten eine kleine Funktion schreiben:

function indexonce(&$ar, $index) {
  return $ar[$index];
}

und nenne das mit:

$something = indexonce(array('a', 'b', 'c'), 2);

Das Array sollte jetzt automatisch zerstört werden.


tatsächlich gibt es eine elegante Lösung :) Im Folgenden wird das dritte Element des Arrays, das von myfunc zurückgegeben wird, $ myvar zugewiesen:

$myvar = array_shift(array_splice(myfunc(),2));

function doSomething()
{
    return $somearray;
}

echo doSomething()->get(1)->getOtherPropertyIfThisIsAnObject();




coding-style