2010-06-17 3 views
5

Ich habe eine Ergebnismenge von Daten, die ich in ein Array in PHP schreiben möchte. Hier ist mein Beispieldaten:Fügen Sie 2 Werte zu 1 Schlüssel in einem PHP-Array

**Name** **Abbrev** 
Mike  M 
Tom  T 
Jim  J 

diese Daten verwenden, möchte ich ein Array in PHP erstellen, die der folgenden ist:

1|Mike|M 
2|Tom|T 
3|Jim|j 

Ich versuchte array_push ($ Werte, 'name', ' Abkürzung ') [Pseudo-Code], die mir folgendes haben:

1|Mike 
2|M 
3|Tom 
4|T 
5|Jim 
6|J 

ich brauche einen Blick nach oben gegen dieses Array zu tun, den gleichen Schlüsselwert zu bekommen, wenn ich ‚Mike‘ nachzuschlagen oder ‚M‘.

Was ist der beste Weg, um meine Ergebnismenge in ein Array wie oben gesetzt zu schreiben, wo Name und Abkürzung den gleichen Schlüssel teilen?

Antwort

14

PHP ist nicht meine Top-Sprache, aber diese:

array_push($values, array("Mike", "M")) 
array_push($values, array("Tom", "T")) 
array_push($values, array("Jim", "J")) 

$name1 = $values[1][0] 
$abbrev1 = $values[1][1] 

oder:

array_push($values, array("name" => "Mike", "abbrev" => "M")) 
array_push($values, array("name" => "Tom", "abbrev" => "T")) 
array_push($values, array("name" => "Jim", "abbrev" => "J")) 

$name1 = $values[1]["name"] 
$abbrev1 = $values[1]["abbrev"] 

Der Trick ist, eine verschachtelte Array zu verwenden, um die Namen und Abkürzungen bei jedem Eintrag zu koppeln.

-3

müssen Sie den gleichen Wert für Mike und M für Schlüssel festlegen.

4
$person = array('name' => 'Mike', 'initial' => 'M'); 
array_push($people, $person); 

Das sagte, ich bin mir nicht sicher, warum Sie die Daten getrennt speichern. Die Initiale kann direkt aus dem Namen über substr($name, 0, 1) abgerufen werden.

+0

Grundsätzlich redundante Information ist, er sagt, dass Sie ein mehrdimensionales Array verwenden müssen.Das Datenarray sollte Zahlen als Schlüssel und Arrays als Werte enthalten. Die Arrays als Werte enthalten den Namen in einem Schlüssel und den Wert in einem anderen Schlüssel. Diese beiden Schlüssel sollten vordefiniert sein (0 und 1/name und initial/n und i/etc). – Tom

+0

danke für den Vorschlag zum Abholen der Abkürzung direkt, aber Ihr Vorschlag funktioniert nur für meine vereinfachte Beispielmenge. Dieser Vorschlag würde für meinen realen Datensatz nicht funktionieren, da die Abkürzung tatsächlich mehr Zeichen und nicht immer innerhalb des Zeichensatzes innerhalb des Namens ist. –

-1

PHP-Arrays funktionieren wie Hash-Lookup-Tabellen. Um also das gewünschte Ergebnis zu erzielen, können Sie zwei Schlüssel initialisieren, einen mit dem aktuellen Wert und den anderen mit einem Verweis auf den ersten. Zum Beispiel Sie tun können:

$a = array('m' => 'value'); 
$a['mike'] = &$a['m']; //notice the end to pass by reference 

, wenn Sie versuchen:

$a = array('m' => 'value'); 
$a['mike'] = &$a['m']; 

print_r($a); 

$a['m'] = 'new_value'; 
print_r($a); 

$a['mike'] = 'new_value_2'; 
print_r($a); 

der Ausgang sein wird:

Array 
(
    [m] => value 
    [mike] => value 
) 
Array 
(
    [m] => new_value 
    [mike] => new_value 
) 
Array 
(
    [m] => new_value_2 
    [mike] => new_value_2 
) 
0

Sie zwei separate Arrays verwenden könnte, vielleicht wie:

$values_names = array(); 
$values_initials = array(); 
array_push($values_names, 'Mike'); 
array_push($values_initials, 'M'); 
array_push($values_names, 'Tom'); 
array_push($values_initials, 'T'); 
array_push($values_names, 'Jim'); 
array_push($values_initials, 'J'); 

Sie verwenden also zwei Arrays, eines für jeden th Die zweite und die dritte Spalte verwenden die Werte in der ersten Spalte als Schlüssel für beide Arrays.

+0

PS: Die Schlüssel werden beginnend mit Null in PHP indiziert (wie in den meisten Sprachen), so dass das erste Schlüssel/Wert-Paar den Schlüssel 0 hat; das zweite Schlüssel-Wert-Paar wird den Schlüssel 1 haben; das dritte Schlüssel-Wert-Paar wird den Schlüssel 2 haben; etc – Tom

2

Sie müssen ein zweidimensionales Array erstellen, um mehr als einen Wert zu speichern.

Jede Zeile in Ihrer Ergebnismenge ist bereits ein Array, daher muss es Ihrer Variablen als Array hinzugefügt werden.

array_push($values, array('name', 'abbreviation')); 
0

vielleicht erstellen Sie eine einfache Klasse für das als die Abkürzung in Ihrem Fall

class Person 
{ 
    public $name; 

    pulbic function __construct($name) 
    { 
     $this->name = (string)$name; 
    } 

    public function getAbbrev() 
    { 
     return substr($this->name, 0, 1); 
    } 

    public function __get($prop) 
    { 
     if ($prop == 'abbrev') { 

      return $this->getAbbrev(); 
     } 
    } 
} 


$persons = array(
    new Person('Mike'), 
    new Person('Tom'), 
    new Person('Jim') 
); 

foreach ($persons as $person) { 

    echo "$person->name ($person->abbrev.)<br/>"; 
} 
Verwandte Themen