2010-01-23 11 views
244

Echa un vistazo a este código:cómo empujar tanto en valor como clave en una matriz

$GET = array();  
$key = 'one=1'; 
$rule = explode('=', $key); 
/* array_push($GET, $rule[0] => $rule[1]); */ 

estoy buscando algo como esto para que:

print_r($GET); 
/* output: $GET[one => 1, two => 2, ...] */ 

¿Hay una función para hacer ¿esta? (porque array_push no funcionará de esta manera)

Respuesta

538

No, no hay array_push() equivalente para matrices asociativas porque no hay manera de determinar la siguiente clave.

Vas a tener que utilizar

$arrayname[indexname] = $value; 
+6

No lo entiendo. ¿No es esta la forma normal de agregar elementos en una matriz? – rgin

+23

@rgin: Sí, lo es. Pero a veces extrañas la solución obvia cuando estás obsesionado con otra cosa (como 'array_push'). :) – Jonik

+0

¿Cómo agregar varias claves y valores a una matriz? por ejemplo, tengo [indexname1] = $ value1 y [indexname2] = $ value2, y quiero agregarlos a $ arrayname –

15

Exactamente lo que dijo Pekka ...

Por otra parte, es probable que pueda utilizar array_merge como éste si quería:

array_merge($_GET, array($rule[0] => $rule[1])); 

Pero Preferiría el método de Pekka probablemente porque es mucho más simple.

5

Estaba buscando lo mismo y me di cuenta de que, una vez más, mi forma de pensar es diferente porque soy de la vieja escuela. Voy hasta BASIC y PERL y a veces olvido lo fácil que son las cosas en PHP.

Acabo de hacer esta función para tomar todas las configuraciones de la base de datos donde son 3 columnas. setkey, item (key) & valor (valor) y colóquelos en una matriz llamada configuraciones usando la misma clave/valor sin usar push como en el ejemplo anterior.

Bastante fácil & simple en realidad

 

// Get All Settings 
$settings=getGlobalSettings(); 


// Apply User Theme Choice 
$theme_choice = $settings['theme']; 

.. etc etc etc .... 




function getGlobalSettings(){ 

    $dbc = mysqli_connect(wds_db_host, wds_db_user, wds_db_pass) or die("MySQL Error: " . mysqli_error()); 
    mysqli_select_db($dbc, wds_db_name) or die("MySQL Error: " . mysqli_error()); 
    $MySQL = "SELECT * FROM systemSettings"; 
    $result = mysqli_query($dbc, $MySQL); 
    while($row = mysqli_fetch_array($result)) 
     { 
     $settings[$row['item']] = $row['value']; // NO NEED FOR PUSH 
     } 
    mysqli_close($dbc); 
return $settings; 
} 


Así como los demás puestos explican ... en PHP que no hay necesidad de "empujar" una matriz cuando se utiliza

Clave => Valor

Y ... No es necesario definir primero la matriz.

$ array = array();

No es necesario definir o presionar. Simplemente asigne $ array [$ key] = $ value; Es automáticamente un impulso y una declaración al mismo tiempo.

Debo agregar que por razones de seguridad, (P) oor (H) elpless (P) rotection, I significa programación para Dummies, me refiero a PHP .... jejeje Sugiero que solo use este concepto para lo que destinado a. Cualquier otro método podría ser un riesgo de seguridad. ¡Allí, hizo mi descargo de responsabilidad!

56

Al presionar un valor en una matriz crea automáticamente una clave numérica para ella.

Al agregar un par clave-valor a una matriz, usted ya tiene la clave, no necesita que la cree. Presionar una tecla en una matriz no tiene sentido. Solo puede establecer el valor de la clave específica en la matriz.

// no key 
array_push($array, $value); 
// same as: 
$array[] = $value; 

// key already known 
$array[$key] = $value; 
41

Usted puede utilizar el operador de unión (+) para combinar las matrices y mantener las claves del array añadido. Por ejemplo:

<?php 

$arr1 = array('foo' => 'bar'); 
$arr2 = array('baz' => 'bof'); 
$arr3 = $arr1 + $arr2; 

print_r($arr3); 

// prints: 
// array(
// 'foo' => 'bar', 
// 'baz' => 'bof', 
//); 

Por lo que podría hacer $_GET += array('one' => 1);.

Hay más información sobre el uso del operador de la unión frente a array_merge en la documentación en http://php.net/manual/en/function.array-merge.php.

+1

La diferencia básica entre el operador' array_merge() 'y' + 'es cuando el 2 matrices contienen valores en la misma tecla '+' operador ignora el valor de la segunda matriz (no anula), tampoco renumera/reindexa las teclas numéricas ... –

9

me gustaría añadir mi respuesta a la mesa y aquí está:

//connect to db ...etc 
$result_product = /*your mysql query here*/ 
$array_product = array(); 
$i = 0; 

foreach ($result_product as $row_product) 
{ 
    $array_product [$i]["id"]= $row_product->id; 
    $array_product [$i]["name"]= $row_product->name; 
    $i++; 
} 

//you can encode the array to json if you want to send it to an ajax call 
$json_product = json_encode($array_product); 
echo($json_product); 

esperanza de que esto ayude a alguien

+0

Miré a través de docenas de soluciones y esta es la única que se ajustan a mi caso de uso. ¡Gracias! –

1

Un poco tarde, pero si no te importa una matriz anidada que podría adoptar este enfoque:

$main_array = array(); //Your array that you want to push the value into 
$value = 10; //The value you want to push into $main_array 
array_push($main_array, array('Key' => $value)); 

para aclarar, si salida json_encode ($ main_array) que se loo k como [{ "clave": "10"}]

3

Esta es la solución que pueden ser útiles para u

Class Form { 
# Declare the input as property 
private $Input = []; 

# Then push the array to it 
public function addTextField($class,$id){ 
    $this->Input ['type'][] = 'text'; 
    $this->Input ['class'][] = $class; 
    $this->Input ['id'][] = $id; 
} 

} 

$form = new Form(); 
$form->addTextField('myclass1','myid1'); 
$form->addTextField('myclass2','myid2'); 
$form->addTextField('myclass3','myid3'); 

Cuando lo tira. El resultado como este

array (size=3) 
    'type' => 
    array (size=3) 
     0 => string 'text' (length=4) 
     1 => string 'text' (length=4) 
     2 => string 'text' (length=4) 
    'class' => 
    array (size=3) 
     0 => string 'myclass1' (length=8) 
     1 => string 'myclass2' (length=8) 
     2 => string 'myclass3' (length=8) 
    'id' => 
    array (size=3) 
     0 => string 'myid1' (length=5) 
     1 => string 'myid2' (length=5) 
     2 => string 'myid3' (length=5) 
2

un poco raro, pero esto funcionó para mí

$array1 = array("Post Slider", "Post Slider Wide", "Post Slider"); 
    $array2 = array("Tools Sliders", "Tools Sliders", "modules-test"); 
    $array3 = array(); 

    $count = count($array1); 

    for($x = 0; $x < $count; $x++){ 
     $array3[$array1[$x].$x] = $array2[$x]; 
    } 

    foreach($array3 as $key => $value){ 
     $output_key = substr($key, 0, -1); 
     $output_value = $value; 
     echo $output_key.": ".$output_value."<br>"; 
    } 
1
$arr = array("key1"=>"value1", "key2"=>"value"); 
    print_r($arr); 

// imprime array [ 'key1' => "valor1", 'clave2' =>" value2 "]

0
array_push($arr, ['key1' => $value1, 'key2' => value2]); 

Esto funciona bien. crea el la llave con su valor en la matriz

+2

Downvoted. Esto simplemente empuja una nueva matriz al final de la matriz '$ arr' existente. – AlexioVay

0

Me pregunto por qué el método más más simple no se ha publicado aún:

$arr = ['company' => 'Apple', 'product' => 'iPhone']; 
$arr += ['version' => 8]; 

Es lo mismo como la fusión de dos matrices conjuntamente con array_merge.

+0

no es exactamente lo mismo, en array_merge, la matriz de la derecha gana en conflicto clave, en "+ =" la matriz de la izquierda gana –

0

hola, tuve el mismo problema, encontré esta solución, debería usar dos matrices y combinarlas ambas

<?php 

$fname=array("Peter","Ben","Joe"); 

$age=array("35","37","43"); 

$c=array_combine($fname,$age); 

print_r($c); 

?> 

referencia: w3schools

0

array_push ($ GET, $ GET [ 'uno'] = 1);

funciona para mí

0

Ejemplo array_merge() ....

$array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result);

Array ([color] => verde, [0] => 2, [1] => 4 , [2] => a, [3] => b, [forma] => trapezoide, [4] => 4,)

Cuestiones relacionadas