2010-06-17 16 views
5

Ho un set di risultati che voglio scrivere su un array in php. Qui è il mio dati di esempio:Aggiungere 2 valori a 1 chiave in un array PHP

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

Utilizzando questi dati, voglio creare un array in PHP che è la seguente:

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

ho provato array_push ($ valori, 'nome', ' sigla ') [pseudo-code], che mi ha dato la seguente:

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

ho bisogno di fare uno sguardo in su contro questa matrice per ottenere lo stesso valore di chiave, se guardo up 'Mike' o 'M'.

Qual è il modo migliore per scrivere il mio set di risultati in un array come sopra riportato dove nome e abbreviazione condividono la stessa chiave?

risposta

14

PHP non è la mia lingua in alto, ma provate questi:

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] 

o:

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"] 

Il trucco è quello di utilizzare un array nidificato per associare i nomi e le abbreviazioni in ogni voce.

-3

deve impostare lo stesso valore per Mike e M per le chiavi.

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

Detto questo, non sono sicuro del motivo per cui si memorizzano i dati separatamente. L'iniziale può essere recuperata direttamente dal nome tramite substr($name, 0, 1).

+0

In sostanza, sta dicendo che è necessario utilizzare un array multi-dimensionale.L'array di dati dovrebbe contenere numeri come chiavi e matrici come valori. Gli array come valori contengono il nome in una chiave e il valore in un'altra chiave. Queste due chiavi dovrebbero essere predefinite (0 e 1/nome e iniziale/n e i/etc). – Tom

+0

grazie per il suggerimento sul recupero della abbrev direttamente, ma il tuo suggerimento funziona solo per il mio set di esempio semplificato. Questo suggerimento non funzionerebbe per il mio vero set di dati perché l'abbreviazione è in realtà più caratteri e non sempre all'interno dell'insieme di caratteri all'interno del nome. –

-1

Gli array di php funzionano come tabelle di ricerca hash, quindi per ottenere il risultato desiderato, è possibile inizializzare 2 tasti, uno con il valore effettivo e l'altro con un riferimento che punta al primo. Per esempio si potrebbe fare:

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

se provate:

$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); 

l'uscita sarà:

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

è possibile utilizzare due array separati, forse come:

$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'); 

Quindi si utilizzano due array, uno per ciascuno di e seconde e terze colonne che usano i valori nel primo come chiavi per entrambi gli array.

+0

PS: le chiavi sono indicizzate a partire da zero in PHP (come nella maggior parte delle lingue), quindi la prima coppia chiave-valore avrà la chiave 0; la seconda coppia chiave-valore avrà la chiave 1; la terza coppia chiave-valore avrà la chiave 2; eccetera – Tom

2

Sarà necessario creare una matrice bidimensionale per memorizzare più di un valore.

Ogni riga del set di risultati è già una matrice, quindi sarà necessario aggiungerla alla variabile come matrice.

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

forse si crea una semplice classe per che come l'abbreviazione è informazioni ridondanti nel tuo caso

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/>"; 
} 
Problemi correlati