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)

Galón
fuente

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;
Pekka
fuente
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;
difunto
fuente
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 .

Charlie Schliesser
fuente
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

Nassim
fuente
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.

jeffff
fuente
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];
AlexioVay
fuente
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)
Faris Rayhan
fuente
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!

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

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

Malla Manuel
fuente
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"}]

Ponto B
fuente
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>";
    }
Bjorn Lottering
fuente
3
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

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

sneha
fuente
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

fantome195
fuente
2

Para agregar a la primera posición con keyyvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;
Bashirpour
fuente
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
)
Nurul Huda
fuente
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 ,)

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

Esto funciona para mi.

aaa
fuente
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])
Elect2
fuente
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');
}`
Deepak Rajpal
fuente
0

Usualmente hago esto:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
marcnyc
fuente