Cómo insertar valor y clave en la matriz PHP


355

Echa un vistazo a este código:

$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 esto? (porque array_pushno funcionará de esta manera)

Respuestas:


760

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

Tendrás que usar

$arrayname[indexname] = $value;

10
No lo entiendo ¿No es esta la forma normal de agregar elementos a una matriz?
rgin

¿Cómo agregar múltiples claves y valores a una matriz? por ejemplo tengo [indexname1] = $ value1 y [indexname2] = $ value2, y quiero agregarlos a $ arrayname
King Goeks

8
@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2);los establecería como los únicos elementos en $arrayname. Si ya ha $arraynameconfigurado y desea mantener sus valores, intente $arrayname += $anotherarray. Tenga en cuenta que las claves existentes en la primera matriz se sobrescribirán en la segunda.
Charlie Schliesser

1
"Tenga en cuenta que cualquier clave existente en la primera matriz se sobrescribirá con la segunda", lo que no es cierto, la primera matriz tiene prioridad. si lo haces $a = array("name" => "John"); $a += array("name" => "Tom");entonces $a["name"]será "John"
santiago arizti

Es la forma más fácil.
NomanJaved

75

Al insertar un valor en una matriz, se crea automáticamente una clave numérica.

Al agregar un par clave-valor a una matriz, ya tiene la clave, no necesita que se cree una para usted. Empujar 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;

66

Puede usar el operador de unión ( +) para combinar matrices y mantener las claves de la matriz agregada. Por ejemplo:

<?php

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

print_r($arr3);

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

Entonces podrías hacer $_GET += array('one' => 1); .

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


44
La diferencia básica entre array_merge()y +operador es cuando las 2 matrices contienen valores en el mismo +operador clave que ignora el valor de la segunda matriz (no anula), tampoco renumera / reindexa las teclas numéricas ...
jave.web

Gracias, he probado muchas funciones de matrices, pero su respuesta me ayudó a lograr lo que quiero,
Danish

21

Me gustaría agregar mi respuesta a la tabla 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);

espero que esto ayude a alguien


1
Revisé docenas de soluciones y esta es la única que se ajusta a mi caso de uso. ¡Gracias!
Ryan Burney

20

Exactamente lo que dijo Pekka ...

Alternativamente, probablemente pueda usar array_merge de esta manera si quisiera:

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

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


11

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

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

2
no es exactamente lo mismo, en array_merge, el conjunto de la derecha gana en un conflicto clave, en "+ =" el conjunto de la izquierda gana
santiago arizti

@santiagoarizti ¿Qué quieres decir con "victorias"?
AlexioVay

1
si dos matrices tienen la misma clave, array_mergey la unión de matriz ( +=) se comporta de la manera opuesta, es decir, array_merge respetará el valor de la segunda matriz y la unión de matriz respetará el valor de la primera matriz.
santiago arizti

La solución perfecta para mí. THX por compartir Alexio! :)
ThomasB

8

Esta es la solución que puede ser útil para usted

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 tiras. 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)

7

Estaba buscando lo mismo y me di cuenta de que, una vez más, mi pensamiento es diferente porque soy de la vieja escuela. Regreso a 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 hay 3 columnas. setkey, item (key) y value (value) y colóquelos en una matriz llamada configuración usando la misma clave / valor sin usar push como se indicó anteriormente.

Bastante fácil y simple realmente

// Obtener todas las configuraciones
$ settings = getGlobalSettings ();


// Aplicar elección de tema de usuario
$ theme_choice = $ settings ['tema'];

.. etc etc etc ....




función getGlobalSettings () {

    $ dbc = mysqli_connect (wds_db_host, wds_db_user, wds_db_pass) o muere ("Error de MySQL:". mysqli_error ());
    mysqli_select_db ($ dbc, wds_db_name) o morir ("Error de MySQL:". mysqli_error ());
    $ MySQL = "SELECT * FROM systemSettings";
    $ resultado = mysqli_query ($ dbc, $ MySQL);
    while ($ row = mysqli_fetch_array ($ resultado)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; // NO NECESITA EMPUJAR
        }
    mysqli_close ($ dbc);
devolver $ settings;
}


Entonces, como explican las otras publicaciones ... En php no hay necesidad de "EMPUJAR" una matriz cuando está usando

Clave => Valor

Y ... No hay necesidad de definir primero la matriz tampoco.

$ matriz = matriz ();

No es necesario definir o empujar. Simplemente asigne $ array [$ clave] = $ valor; Es automáticamente un empuje y una declaración al mismo tiempo.

Debo agregar que por razones de seguridad, (P) o (H) elpless (P) rotection, me refiero a Programación para Dummies, me refiero a PHP ... jejeje, sugiero que solo utilices este concepto para lo que pretendía. Cualquier otro método podría ser un riesgo para la seguridad. ¡Allí, hice mi descargo de responsabilidad!


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

Esto funciona bien. crea la clave con su valor en la matriz


44
Voto negativo Esto simplemente empuja una nueva matriz al final de la $arrmatriz existente .
AlexioVay

4

Un poco tarde, pero si no te importa una matriz anidada, puedes 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 genera json_encode ($ main_array) se verá como [{"Key": "10"}]


4

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>";
    }

3
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

// imprime la matriz ['key1' => "value1", 'key2' => "value2"]


2

hola tuve el mismo problema, encuentro esta solución, debes usar dos matrices y luego combinarlas

 <?php

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

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

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

print_r($c);

?>

referencia: w3schools



2

Para agregar a la primera posición con keyyvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;

2

Para insertar una "clave" y un "valor" en una matriz existente, puede usar += operador de acceso directo.

Vea este ejemplo muy simple:

$GET = [];
$GET += ['one' => 1];

El resultado de print_r($GET)será:

Array
(
    [one] => 1
)

1

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

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


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

Esto funciona para mi.


Esto se ejecuta $GET['one']=1, luego usa el valor de retorno de esa declaración (= 1, el valor r), y luego se ejecuta array_push($GET, 1). Resultado = [0] -> 1, [uno] -> 1
KekuSemau

0

Escribí una función simple:

function push(&$arr,$new) {
    $arr = array_merge($arr,$new);
}

para poder "adherir" un nuevo elemento fácilmente:

push($my_array, ['a'=>1,'b'=>2])

0

Hay algunos buenos ejemplos ya dados aquí. Simplemente agregue un ejemplo simple para empujar elementos de matriz asociativa al índice de índice numérico raíz.

`$intial_content = array();

if (true) {
 $intial_content[] = array('name' => 'xyz', 'content' => 'other content');
}`

0

Usualmente hago esto:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.