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 15.01.2012, 22:02  
Mak
Neuer Benutzer
 
Registriert seit: 10.08.2009
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
Mak befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Array anhand der Keys extrahieren

Hallo,
ich habe ein kleines Problem und bin mir sicher, dass es eine einfache Funktion gibt, die genau das macht, was ich suche. Ich finde sie nur nicht.

Also, ich habe ein Array a mit Daten, z.B.

PHP-Code:
$a = array('key1' => 'a''key2' => 'b''key3' => 'c''key4' => 'd'); 
und ein zweites Array b, das einen Teil der Keys aus Array a enthält, z.B.

PHP-Code:
$b = array('key1''key3'); 
Was ich jetzt suche ist eine Funktion, die mir ein Array c ausspuckt, das aus Array a nur die Einträge enthält, deren Keys in Array b gespeichert sind. In diesem Beispiel müsste c also sein:

PHP-Code:
$c = array('key1' => 'a''key3' => 'c'
Ich hoffe, das ist so verständlich. Zur Zeit löse ich das mit zwei verschachtelten foreach. Geht das leichter?
Mak ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 15.01.2012, 22:15  
Erfahrener Benutzer
 
Registriert seit: 18.01.2009
Beiträge: 128
PHP-Kenntnisse:
Fortgeschritten
CPCoder wird schon bald berühmt werden
Standard

Geht am schnellsten per foreach()

PHP-Code:
$a = array('key1' => 'a''key2' => 'b''key3' => 'c''key4' => 'd');
$b = array('key1''key3');
$c = array();

foreach (
$b as $key) {
    
$c[] = $a[$key];

CPCoder ist offline   Mit Zitat antworten
Alt 15.01.2012, 22:23  
Mak
Neuer Benutzer
 
Registriert seit: 10.08.2009
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
Mak befindet sich auf einem aufstrebenden Ast
Standard

Danke, dir! Habe aber beim Vereinfachen die Frage falsch gestellt

Ich mache das jetzt mal mit den originalen Daten, damit ich nicht wieder durcheinanderkomme.

Ich habe ein Array:
PHP-Code:
$columns = array('sender''subject''created_at'); 
Und ein zweites Array mit den Daten (ich habs mal rauskopiert):
Code:
Array
(
    [0] => Array
        (
            [id] => 1
            [sender] => 1
            [recipient] => 
            [subject] => Test
            [message] => 
            [approved] => 
            [is_read] => 
            [created_at] => 2007-01-01 00:00:00
            [updated_at] => 
        )

    [1] => Array
        (
            [id] => 2
            [sender] => 1
            [recipient] => 
            [subject] => Test
            [message] => 
            [approved] => 
            [is_read] => 
            [created_at] => 2007-01-01 00:00:00
            [updated_at] => 
        )

    [2] => Array
        (
            [id] => 3
            [sender] => 1
            [recipient] => 
            [subject] => Test
            [message] => 
            [approved] => 
            [is_read] => 
            [created_at] => 2007-01-01 00:00:00
            [updated_at] => 
        )
)
Was ich jetzt haben möchte ist im Grunde das zweite Array, aber nur mit den Keys aus $columns, sprich:

Zitat:
Array
(
[0] => Array
(
[sender] => 1
[subject] => Test
[created_at] => 2007-01-01 00:00:00
)

[1] => Array
(
[sender] => 1
[subject] => Test
[created_at] => 2007-01-01 00:00:00
)

[2] => Array
(
[sender] => 1
[subject] => Test
[created_at] => 2007-01-01 00:00:00
)
)
Ich stehe auf dem Schlauch, das muss doch irgendwie einfacher gehen als mit verschachtelten Schleifen?!
Mak ist offline   Mit Zitat antworten
Alt 15.01.2012, 22:36  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard

Als Lösung fürs erste Problem gedacht, sollte aber eigentlich auch leicht auf deinen neuen Post anwendbar sein, zur Not mit einer einfachen foreach-Schleife durcharbeiten drüber(auch wenn der Vorschlag wohl unnötig kompliziert ist).

PHP-Code:
<?php
// php 5.3+
$result array_intersect_ukey($a$b, function ($key1$key2) use($b){
        if(
array_key_exists($key2$b) && $key1 == $b[$key2])
            return 
0;
        return -
1;
    });
    
var_dump($result);
__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL
Suralc ist offline   Mit Zitat antworten
Alt 15.01.2012, 22:58  
Erfahrener Benutzer
 
Registriert seit: 18.01.2009
Beiträge: 128
PHP-Kenntnisse:
Fortgeschritten
CPCoder wird schon bald berühmt werden
Standard

Zitat:
Zitat von Mak Beitrag anzeigen
Danke, dir! Habe aber beim Vereinfachen die Frage falsch gestellt
Nicht nur die Frage war falsch gestellt, du hast auch verschwiegen, dass es sich bei dem Daten-Array um ein "Multi-Array" handelt!

Nundenn, dies ist aber nicht weiter tragisch, dazu musst den von mir geposteten Code nur etwas anpassen:

PHP-Code:
$i 0;
foreach (
$a as $key_a) {
    foreach (
$key_a as $key => $val) {
        if (
in_array($key$b)) {
            
$c[$i][$key] = $val;
        }
    }
    
$i++;

CPCoder ist offline   Mit Zitat antworten
Alt 15.01.2012, 23:02  
Mak
Neuer Benutzer
 
Registriert seit: 10.08.2009
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
Mak befindet sich auf einem aufstrebenden Ast
Standard

Danke. So wie CPCoder es gelöst hat, habe ich es zur Zeit auch. Ich finde verschachtelte Schleifen nur fürchterlich.
Mit Suralcs Code (bzw. einem Vergleichbaren, auf intersect bin ich gar nicht gekommen) spare ich mir ja immerhin schon mal eine von beiden Schleifen. Ich nehme auch mal an, dass es ganz ohne nicht geht.
Mak ist offline   Mit Zitat antworten
Alt 15.01.2012, 23:23  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard

Ich bin zu müde: Ohne Garantien:

PHP-Code:
<?php
$a 
= array ();
$a [] = array ('key1' => 'a''key2' => 'b''key3' => 'c''key4' => 'd' );
$a [] = array ('key1' => 'e''key2' => 'f''key3' => 'g''key4' => 'h' );
$b = array ('key1''key3' );
$callback2 = function(&$item$key$data){
        
array_walk($item, function (&$item_b$key$data) use (&$item){
            if(!
in_array($key$data)){
                unset(
$item[$key]);
            }
        }, 
$data);
    };
array_walk $a$callback$b );
var_dump $a );
__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL

Geändert von Suralc (16.01.2012 um 00:07 Uhr).
Suralc ist offline   Mit Zitat antworten
Alt 15.01.2012, 23:36  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von CPCoder Beitrag anzeigen
dass es sich bei dem Daten-Array um ein "Multi-Array" handelt!
Es soll auch multi arrays mit mehr als 2 Dimensionen geben. Das Zauberwort heißt Rekursion.
  Mit Zitat antworten
Alt 15.01.2012, 23:41  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von meikel Beitrag anzeigen
Es soll auch multi arrays mit mehr als 2 Dimensionen geben. Das Zauberwort heißt Rekursion.
Solange der Autor keine weiteren Ebenen aus dem Hut zaubert, sollte eine rekursive Funktion (hier) aber eigentlich unnötig sein.
__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL
Suralc 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
[Erledigt] Mehrdimensionalem Array umformen, Index neu setzen und anschließend sortie wooha PHP Einsteiger 3 26.04.2011 12:08
Array aus SQL Abfrage zusammenbauen um es rekursiv abzuarbeiten litterauspirna PHP Einsteiger 7 01.02.2011 18:44
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
Ein (Teil)Array anhand von level und depth zurückgeben. greatcthulhu Scriptbörse 4 16.04.2010 10:45
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
[Erledigt] array sortieren PHP Tipps 2004 17 13.05.2009 10:44
Array umwandeln von zwei zu mehrdimensional erselbst PHP Tipps 2009 6 02.04.2009 23:30
Keys aus Array löschen die keinen Wert beinhalten? PHP Tipps 2006 7 06.04.2006 16:07
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 array anhand keys, php array anhand key

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