2010-06-17 25 views
5

Tengo un conjunto de resultados de datos que quiero escribir en una matriz en php. Aquí está mi datos de la muestra:Agregue 2 valores a 1 clave en una matriz PHP

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

Con los datos obtenidos, quiero crear una matriz en PHP que es lo siguiente:

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

Probé array_push ($ valores, 'nombre', ' abreviatura ') [seudo código], lo que me dio la siguiente:

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

tengo que hacer una mirada hacia arriba en contra de esta matriz para obtener el mismo valor de clave, si miro hacia arriba 'Mike' o 'M'.

¿Cuál es la mejor manera de escribir mi conjunto de resultados en una matriz como se establece arriba, donde el nombre y la abreviatura comparten la misma clave?

Respuesta

14

PHP no es mi lengua superior, pero trata de los siguientes:

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

El truco consiste en utilizar una matriz anidada para emparejar los nombres y abreviaturas en cada entrada.

-3

tienen que establecer el mismo valor para Mike y M para las claves.

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

Dicho esto, no estoy seguro de por qué está almacenando los datos por separado. La inicial se puede obtener directamente del nombre a través del substr($name, 0, 1).

+0

Básicamente, él está diciendo que es necesario utilizar una matriz multi-dimensional.La matriz de datos debe contener números como claves y matrices como valores. Los arrays como valores contienen el nombre en una clave y el valor en otra clave. Estas dos claves deben estar predefinidas (0 y 1/nombre e inicial/n e i/etc). – Tom

+0

gracias por la sugerencia de obtener la abreviatura directamente, pero su sugerencia solo funciona para mi conjunto de muestra simplificado. Esta sugerencia no funcionaría para mi conjunto de datos real porque la abreviación es realmente más caracteres y no siempre dentro del conjunto de caracteres dentro del nombre. –

-1

Las matrices php funcionan como tablas de búsqueda hash, por lo que para lograr el resultado deseado, puede inicializar 2 claves, una con el valor real y la otra con una referencia que apunte a la primera. Por ejemplo, podría hacer:

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

si se intenta:

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

la salida será:

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

se pueden utilizar dos matrices independientes, tal como:

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

Así que utiliza dos matrices, una para cada e segunda y tercera columnas usando los valores en el primero como claves para ambas matrices.

+0

PD: las claves se indexan comenzando con cero en PHP (como en la mayoría de los lenguajes), por lo que el primer par de clave-valor tendrá la clave 0; el segundo par clave-valor tendrá la clave 1; el tercer par clave-valor tendrá la clave 2; etc – Tom

2

Deberá crear una matriz bidimensional para almacenar más de un valor.

Cada fila en su conjunto de resultados ya es una matriz, por lo que deberá agregarse a su variable como una matriz.

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

tal vez se crea una clase simple para que a medida que la abreviatura es información redundante en su 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/>"; 
} 
Cuestiones relacionadas