วิธีการผลักดันค่าและคีย์ลงในอาร์เรย์ PHP


355

ลองดูรหัสนี้:

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

ฉันกำลังมองหาสิ่งนี้เพื่อที่:

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

มีฟังก์ชั่นการทำเช่นนี้หรือไม่? (เพราะarray_pushจะไม่ทำงานด้วยวิธีนี้)

คำตอบ:


759

ไม่, ไม่มีarray_push()ค่าเทียบเท่าสำหรับอาเรย์แบบเชื่อมโยงได้เนื่องจากไม่มีวิธีกำหนดคีย์ถัดไป

คุณจะต้องใช้

$arrayname[indexname] = $value;

10
ฉันไม่เข้าใจ นี่ไม่ใช่วิธีปกติในการเพิ่มรายการลงในอาร์เรย์ใช่ไหม
rgin

วิธีเพิ่มคีย์และค่าหลายค่าในอาเรย์ เช่นฉันมี [indexname1] = $ value1 และ [indexname2] = $ value2 และฉันต้องการเพิ่มลงใน $ arrayname
King Goeks

8
@KingGoeks จะตั้งค่าให้เป็นรายการเฉพาะใน$arrayname = array('indexname1' => $value1, 'indexname2' => $value2); $arraynameหากคุณมีชุดและต้องการที่จะให้ค่าลอง$arrayname $arrayname += $anotherarrayโปรดทราบว่าคีย์ที่มีอยู่ในอาเรย์แรกจะถูกเขียนทับในลำดับที่สอง
Charlie Schliesser

1
"โปรดทราบว่าคีย์ที่มีอยู่ในอาเรย์แรกจะถูกเขียนทับในลำดับที่สอง" ซึ่งไม่เป็นความจริงอาเรย์แรกมีลำดับความสำคัญ ถ้าคุณทำเช่น$a = array("name" => "John"); $a += array("name" => "Tom");นั้น$a["name"]จะเป็น "จอห์น"
santiago arizti

มันเป็นวิธีที่ง่ายที่สุด
NomanJaved

75

การกดค่าในอาร์เรย์จะสร้างคีย์ตัวเลขโดยอัตโนมัติ

เมื่อเพิ่มคู่คีย์ - ค่าลงในอาร์เรย์คุณมีคีย์อยู่แล้วคุณไม่จำเป็นต้องสร้างคู่ใหม่สำหรับคุณ การกดคีย์ลงในอาร์เรย์นั้นไม่สมเหตุสมผล คุณสามารถกำหนดค่าของคีย์เฉพาะในอาร์เรย์

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

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

66

คุณสามารถใช้ตัวดำเนินการ union ( +) เพื่อรวมอาร์เรย์และเก็บคีย์ของอาร์เรย์ที่เพิ่มเข้ามา ตัวอย่างเช่น:

<?php

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

print_r($arr3);

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

$_GET += array('one' => 1);ดังนั้นคุณสามารถทำ

มีข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานของผู้ประกอบการสหภาพเทียบเป็นarray_mergeอยู่ในเอกสารที่http://php.net/manual/en/function.array-merge.php


4
ความแตกต่างพื้นฐานระหว่างarray_merge()และ+โอเปอเรเตอร์คือเมื่อทั้งสองอาร์เรย์มีค่าในตัว+ดำเนินการคีย์เดียวกันละเว้นค่าจากอาเรย์ที่สอง (ไม่แทนที่), และจะไม่เปลี่ยนหมายเลข / ทำดัชนีคีย์ตัวเลข ...
jave.web

ขอบคุณคุณฉันได้ลองฟังก์ชั่นอาร์เรย์มากมาย แต่คำตอบของคุณช่วยให้ฉันบรรลุสิ่งที่ฉันต้องการ
ภาษาเดนมาร์ก

21

ฉันต้องการเพิ่มคำตอบของฉันลงในตารางและนี่คือ:

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

หวังว่านี่จะช่วยใครซักคน


1
ฉันดูวิธีแก้ปัญหาหลายสิบข้อและนี่เป็นทางเดียวที่เหมาะกับกรณีการใช้ของฉัน ขอบคุณ!
Ryan Burney

20

สิ่งที่ Pekka พูด ...

หรือคุณสามารถใช้ array_merge เช่นนี้หากคุณต้องการ:

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

แต่ฉันชอบวิธีของ Pekka มากกว่าเพราะมันง่ายกว่ามาก


11

ฉันสงสัยว่าทำไมวิธีที่ง่ายที่สุดยังไม่ได้โพสต์:

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

2
มันไม่เหมือนกันทั้งหมดใน array_merge อาร์เรย์ทางด้านขวาชนะจากความขัดแย้งที่สำคัญใน "+ =" อาร์เรย์ทางด้านซ้ายชนะ
santiago arizti

@santiagoarizti คุณหมายถึงอะไรโดย "wins"?
AlexioVay

1
หากสองอาร์เรย์มีทั้งคีย์เดียวกันarray_mergeและarray union ( +=) ทำงานในทางตรงข้ามเช่น array_merge จะเคารพค่าจากอาร์เรย์ที่สองและอาร์เรย์สหภาพจะเคารพค่าจากอาร์เรย์แรก
santiago arizti

โซลูชั่นที่สมบูรณ์แบบสำหรับฉัน ขอบคุณสำหรับการแบ่งปัน Alexio! :)
ThomasB

8

นี่คือทางออกที่อาจเป็นประโยชน์สำหรับคุณ

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

เมื่อคุณทิ้งมัน ผลลัพธ์เช่นนี้

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

ฉันแค่กำลังมองหาสิ่งเดียวกันและฉันก็ตระหนักว่าอีกครั้งความคิดของฉันแตกต่างไปจากฉันเป็นโรงเรียนเก่า ฉันไปตลอดทางจนถึง BASIC และ PERL และบางครั้งฉันก็ลืมสิ่งที่ง่าย ๆ ใน PHP

ฉันเพิ่งทำฟังก์ชั่นนี้เพื่อทำการตั้งค่าทั้งหมดจากฐานข้อมูลที่มี 3 คอลัมน์ setkey, item (key) & value (value) และวางไว้ใน array ที่เรียกว่า settings โดยใช้คีย์ / ค่าเดียวกันโดยไม่ต้องกดเหมือนด้านบน

สวยง่าย & เรียบง่ายจริงๆ

// รับการตั้งค่าทั้งหมด
การตั้งค่า $ = getGlobalSettings ();


// ใช้ตัวเลือกธีมผู้ใช้
$ theme_choice = $ settings ['theme'];

.. ฯลฯ ฯลฯ ฯลฯ ....




ฟังก์ชัน getGlobalSettings () {

    $ dbc = mysqli_connect (wds_db_host, wds_db_user, wds_db_pass) หรือตาย ("ข้อผิดพลาดของ MySQL:". mysqli_error ());
    mysqli_select_db ($ dbc, wds_db_name) หรือตาย ("ข้อผิดพลาดของ MySQL:". mysqli_error ());
    $ MySQL = "เลือก * จากการตั้งค่าระบบ";
    $ result = mysqli_query ($ dbc, $ MySQL);
    ในขณะที่ ($ row = mysqli_fetch_array ($ ผลลัพธ์)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; // ไม่จำเป็นต้องผลักดัน
        }
    mysqli_close ($ DBC);
ส่งคืนการตั้งค่า $;
}


เช่นเดียวกับการโพสต์อื่น ๆ อธิบาย ... ใน php ไม่จำเป็นต้อง "PUSH" อาร์เรย์เมื่อคุณใช้

Key => ค่า

และ ... ไม่จำเป็นต้องกำหนดอาร์เรย์ก่อนเช่นกัน

อาร์เรย์ $ = array ();

ไม่จำเป็นต้องกำหนดหรือผลักดัน เพียงแค่กำหนด $ array [$ key] = $ value; เป็นการกดและประกาศโดยอัตโนมัติในเวลาเดียวกัน

ฉันต้องเพิ่มมันด้วยเหตุผลด้านความปลอดภัย (P) oor (H) elpless (P) การหมุนฉันหมายถึงการเขียนโปรแกรมสำหรับ Dummies ฉันหมายถึง PHP .... ฮิฮิฉันแนะนำให้คุณใช้แนวคิดนี้กับสิ่งที่ฉันตั้งใจ วิธีการอื่นอาจมีความเสี่ยงด้านความปลอดภัย ที่นั่นทำให้ข้อจำกัดความรับผิดชอบของฉัน!


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

มันใช้งานได้ดี สร้างคีย์ด้วยค่าในอาร์เรย์


4
downvoted นี่จะส่งอาร์เรย์ใหม่ที่ส่วนท้ายของ$arrอาร์เรย์ที่มีอยู่
AlexioVay

4

สายไปหน่อย แต่ถ้าคุณไม่สนใจอาเรย์ที่ซ้อนกันคุณสามารถใช้วิธีนี้ได้:

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

หากต้องการชี้แจงหากคุณแสดงผลjson_encode ($ main_array)ที่จะมีลักษณะเช่น[{"Key": "10"}]


4

ค่อนข้างแปลก แต่มันก็ใช้ได้กับฉัน

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

// พิมพ์อาร์เรย์ ['key1' => "value1", 'key2' => "value2"]


2

สวัสดีฉันมีปัญหาเดียวกันฉันพบวิธีแก้ปัญหานี้คุณควรใช้สองอาร์เรย์จากนั้นรวมเข้าด้วยกัน

 <?php

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

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

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

print_r($c);

?>

การอ้างอิง: w3schools



2

สำหรับเพิ่มไปยังตำแหน่งแรกด้วยkeyและvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;

2

ในการส่ง "คีย์" และ "ค่า" ไปยังอาร์เรย์ที่มีอยู่คุณสามารถใช้+=ตัวดำเนินการทางลัด

ดูตัวอย่างง่ายๆนี้:

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

ผลลัพธ์ที่print_r($GET)ได้คือ:

Array
(
    [one] => 1
)

1

ตัวอย่าง 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] => สีเขียว, [0] => 2, [1] => 4, [2] => a, [3] => b, [รูปร่าง] => สี่เหลี่ยมคางหมู, [4] => 4 )


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

มันใช้งานได้สำหรับฉัน


รันนี้$GET['one']=1แล้วใช้ค่าการกลับมาของคำสั่งที่ (= 1 rvalue) array_push($GET, 1)และจากนั้นรัน ผล = [0] -> 1, [หนึ่ง] -> 1
KekuSemau

0

ฉันเขียนฟังก์ชันง่าย ๆ :

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

เพื่อให้ฉันสามารถ "เพิ่ม" องค์ประกอบใหม่ได้อย่างง่ายดาย:

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

0

มีตัวอย่างที่ยอดเยี่ยมให้แล้วที่นี่ เพียงแค่เพิ่มตัวอย่างง่ายๆในการผลักองค์ประกอบอาร์เรย์เชื่อมโยงไปยังดัชนีดัชนีตัวเลขราก

`$intial_content = array();

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.