Cara memasukkan nilai dan kunci ke dalam array PHP

355

Lihatlah kode ini:

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

Saya mencari sesuatu seperti ini sehingga:

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

Apakah ada fungsi untuk melakukan ini? (karena array_pushtidak akan bekerja dengan cara ini)

Gal
sumber

Jawaban:

759

Tidak, tidak ada yang array_push()setara untuk array asosiatif karena tidak ada cara menentukan kunci berikutnya.

Anda harus menggunakan

$arrayname[indexname] = $value;
Pekka
sumber
10
Saya tidak mengerti. Bukankah ini cara biasa menambahkan item ke dalam array?
rgin
Bagaimana cara menambahkan beberapa kunci dan nilai ke array? misalnya saya punya [indexname1] = $ value1 dan [indexname2] = $ value2, dan saya ingin menambahkannya ke $
arrayname
8
@ KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2);akan menjadikannya sebagai satu-satunya item di $arrayname. Jika Anda telah $arraynamemenetapkan dan ingin mempertahankan nilainya, coba $arrayname += $anotherarray. Ingatlah bahwa semua kunci yang ada dalam array pertama akan ditimpa oleh yang kedua.
Charlie Schliesser
1
"Ingat bahwa kunci apa pun yang ada dalam array pertama akan ditimpa oleh yang kedua" itu tidak benar, array pertama memiliki prioritas. jika Anda melakukannya $a = array("name" => "John"); $a += array("name" => "Tom");maka $a["name"]akan menjadi "John"
santiago arizti
itu cara termudah.
Noman Diikat
75

Mendorong nilai ke dalam array secara otomatis membuat kunci numerik untuknya.

Saat menambahkan pasangan nilai kunci ke array, Anda sudah memiliki kunci, Anda tidak perlu membuatnya untuk Anda. Menekan kunci ke dalam array tidak masuk akal. Anda hanya bisa mengatur nilai kunci spesifik dalam array.

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

// key already known
$array[$key] = $value;
tipuan
sumber
66

Anda dapat menggunakan operator gabungan ( +) untuk menggabungkan array dan menyimpan kunci array yang ditambahkan. Sebagai contoh:

<?php

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

print_r($arr3);

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

Jadi kamu bisa melakukannya $_GET += array('one' => 1);.

Ada informasi lebih lanjut tentang penggunaan operator serikat vs array_mergedalam dokumentasi di http://php.net/manual/en/function.array-merge.php .

Charlie Schliesser
sumber
4
Perbedaan mendasar antara array_merge()dan +operator adalah ketika array 2 berisi nilai-nilai pada +operator kunci yang sama mengabaikan nilai dari array kedua (tidak menimpa), juga tidak
menomori
Terima kasih, saya telah mencoba banyak fungsi array tetapi jawaban Anda membantu saya mencapai apa yang saya inginkan,
Denmark
21

Saya ingin menambahkan jawaban saya ke tabel dan ini dia:

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

berharap ini akan membantu seseorang

Nassim
sumber
1
Saya melihat melalui puluhan solusi dan ini adalah satu-satunya yang sesuai dengan kasus penggunaan saya. Terima kasih!
Ryan Burney
20

Persis seperti yang dikatakan Pekka ...

Atau, Anda mungkin dapat menggunakan array_merge seperti ini jika Anda mau:

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

Tapi saya lebih suka metode Pekka mungkin karena jauh lebih sederhana.

jeffff
sumber
11

Saya bertanya-tanya mengapa metode paling sederhana belum diposting:

$arr = ['company' => 'Apple', 'product' => 'iPhone'];
$arr += ['version' => 8];
AlexioVay
sumber
2
itu tidak persis sama, di array_merge, array di sebelah kanan menang pada konflik kunci, di "+ =" array di sebelah kiri menang
santiago arizti
@santiagoarizti Apa yang Anda maksud dengan "menang"?
AlexioVay
1
jika dua array memiliki kedua kunci yang sama, array_mergedan array union ( +=) berperilaku dengan cara yang berlawanan yaitu array_merge akan menghormati nilai dari array kedua dan union array akan menghormati nilai dari array pertama.
santiago arizti
solusi sempurna untuk saya. THX untuk berbagi Alexio! :)
ThomasB
8

Ini adalah solusi yang mungkin berguna bagi Anda

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

Ketika Anda membuangnya. Hasilnya seperti ini

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
sumber
7

Saya hanya mencari hal yang sama dan saya menyadari bahwa, sekali lagi, pemikiran saya berbeda karena saya jadul. Saya kembali ke BASIC dan PERL dan kadang-kadang saya lupa betapa mudahnya hal-hal di PHP.

Saya baru saja membuat fungsi ini untuk mengambil semua pengaturan dari database di mana mereka adalah 3 kolom. setkey, item (key) & value (value) dan tempatkan ke dalam array yang disebut pengaturan menggunakan kunci / nilai yang sama tanpa menggunakan push seperti di atas.

Cukup mudah & sederhana kok

// Dapatkan Semua Pengaturan
$ settings = getGlobalSettings ();


// Terapkan Pilihan Tema Pengguna
$ theme_choice = $ settings ['theme'];

.. dll dll dll ....




function getGlobalSettings () {

    $ dbc = mysqli_connect (wds_db_host, wds_db_user, wds_db_pass) atau mati ("Kesalahan MySQL:". mysqli_error ());
    mysqli_select_db ($ dbc, wds_db_name) atau mati ("MySQL Error:". mysqli_error ());
    $ MySQL = "SELECT * FROM systemSettings";
    $ result = mysqli_query ($ dbc, $ MySQL);
    while ($ row = mysqli_fetch_array ($ hasil)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; // TIDAK PERLU PUSH
        }
    mysqli_close ($ dbc);
mengembalikan $ pengaturan;
}


Jadi seperti yang dijelaskan posting lainnya ... Di php tidak perlu "PUSH" sebuah array saat Anda menggunakan

Kunci => Nilai

DAN ... Tidak perlu lagi menentukan array.

$ array = array ();

Tidak perlu mendefinisikan atau mendorong. Cukup tetapkan $ array [$ key] = $ value; Ini secara otomatis merupakan dorongan dan deklarasi pada saat yang bersamaan.

Saya harus menambahkan bahwa untuk alasan keamanan, (P) oor (H) elpless (P) rotasi, maksud saya Pemrograman untuk Dummies, maksud saya PHP .... hehehe Saya sarankan Anda hanya menggunakan konsep ini untuk apa yang saya maksudkan. Metode lain apa pun bisa menjadi risiko keamanan. Di sana, buat penafian saya!

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

Ini berfungsi dengan baik. menciptakan kunci dengan nilainya dalam array

Mesh Manuel
sumber
4
Diturunkan. Ini hanya mendorong array baru di akhir $arrarray yang ada .
AlexioVay
4

Agak terlambat tetapi jika Anda tidak keberatan dengan array bersarang, Anda bisa menggunakan pendekatan ini:

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

Untuk memperjelas, jika Anda menampilkan json_encode ($ main_array) yang akan terlihat seperti [{"Kunci": "10"}]

Pontus B
sumber
4

Agak aneh, tapi ini berhasil untukku

    $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
sumber
3
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

// mencetak array ['key1' => "value1", 'key2' => "value2"]

sneha
sumber
2

hai saya punya masalah yang sama saya menemukan solusi ini Anda harus menggunakan dua array kemudian menggabungkan keduanya

 <?php

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

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

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

print_r($c);

?>

referensi: w3schools

fantome195
sumber
2

Untuk menambah ke posisi pertama dengan keydanvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;
Bashirpour
sumber
2

Untuk mendorong "kunci" dan "nilai" ke array yang ada, Anda dapat menggunakan +=operator pintasan.

Lihat contoh yang sangat sederhana ini:

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

Hasilnya print_r($GET)adalah:

Array
(
    [one] => 1
)
Nurul Huda
sumber
1

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

Larik ([warna] => hijau, [0] => 2, [1] => 4, [2] => a, [3] => b, [bentuk] => trapesium, [4] => 4 ,)

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

Ini bekerja untuk saya.

aaa
sumber
Ini dijalankan $GET['one']=1, kemudian gunakan nilai balik pernyataan itu (= 1, nilai), dan kemudian jalankan array_push($GET, 1). Hasil = [0] -> 1, [satu] -> 1
KekuSemau
0

Saya menulis fungsi sederhana:

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

sehingga saya dapat "memberdayakan" elemen baru dengan mudah:

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

Ada beberapa contoh bagus yang sudah diberikan di sini. Hanya menambahkan contoh sederhana untuk mendorong elemen array asosiatif ke root indeks indeks numerik.

`$intial_content = array();

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

Saya biasanya melakukan ini:

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