พุชไอเท็มไปยัง Associative array ใน PHP


92

ฉันพยายามผลักดันรายการไปยังอาร์เรย์ที่เชื่อมโยงเช่นนี้:

$new_input['name'] = array(
    'type' => 'text', 
    'label' => 'First name', 
    'show' => true, 
    'required' => true
);
array_push($options['inputs'], $new_input);

อย่างไรก็ตามแทนที่จะใช้ "ชื่อ" เป็นคีย์ในการเพิ่มตัวเลข มีวิธีอื่นที่จะทำได้หรือไม่?


ไม่สามารถผลักอาร์เรย์ไปยังอาร์เรย์อื่นได้ ฉันได้ลองใช้ตัวเลือกทั้งหมดนี้แล้วและการผสานก็เพิ่มอาร์เรย์เข้าไป ฉันแก้ปัญหาด้วยคลาส
Alex Benincasa Santos

คำตอบ:



62

แทนที่จะใช้array_push ()ให้ใช้array_merge ()

มันจะรวมสองอาร์เรย์และรวมไอเท็มไว้ในอาร์เรย์เดียว

ตัวอย่างรหัส -

$existing_array = array('a'=>'b', 'b'=>'c');
$new_array = array('d'=>'e', 'f'=>'g');

$final_array=array_merge($existing_array, $new_array);

ส่งคืนอาร์เรย์ผลลัพธ์ใน final_array และผลลัพธ์ของอาร์เรย์ผลลัพธ์จะเป็น -

array('a'=>'b', 'b'=>'c','d'=>'e', 'f'=>'g')

โปรดตรวจสอบลิงก์นี้เพื่อรับทราบปัญหาที่อาจเกิดขึ้น


1
จริงๆแล้วมันควรจะเป็น $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ result = array_merge ($ existing_array, $ new_array);
Calvin Chan

1
มันเป็นเรื่องธรรมดาที่จะรวบรวมเอาท์พุท ฉันแค่ให้ความคิด ขอแสดงความนับถือ
Murtaza Khursheed Hussain


7

โซลูชันของ WebbieDave จะใช้งานได้ หากคุณไม่ต้องการเขียนทับสิ่งที่อาจมีอยู่แล้วที่ 'ชื่อ' คุณสามารถทำสิ่งนี้ได้:

$options['inputs']['name'][] = $new_input['name'];


วิธีนี้ใช้ไม่ได้ถ้าคุณไม่ต้องการให้ทุกอย่างเชื่อมโยงกันเช่นโดยไม่ต้องดันอาร์เรย์ที่มีหมายเลขอื่น ๆ ดู @Steven H ด้านล่าง
brianlmerritt

4

ถ้า$new_inputอาจจะมีมากกว่าเพียงแค่ 'ชื่อ' array_mergeองค์ประกอบที่คุณอาจต้องการที่จะใช้

$new_input = array('name'=>array(), 'details'=>array());
$new_input['name'] = array('type'=>'text', 'label'=>'First name'...);
$options['inputs'] = array_merge($options['inputs'], $new_input);

3

คำตอบของ Curtis นั้นใกล้เคียงกับสิ่งที่ฉันต้องการมาก แต่ฉันก็เปลี่ยนมันเล็กน้อย

ที่เขาใช้:

$options['inputs']['name'][] = $new_input['name'];

ฉันใช้:

$options[]['inputs']['name'] = $new_input['name'];

นี่คือรหัสจริงของฉันโดยใช้แบบสอบถามจากฐานข้อมูล:

while($row=mysql_fetch_array($result)){ 
    $dtlg_array[]['dt'] = $row['dt'];
    $dtlg_array[]['lat'] = $row['lat'];
    $dtlg_array[]['lng'] = $row['lng'];
}

ขอบคุณ!


3

ฉันใช้ php5.6

รหัส :

$person = ["name"=>"mohammed", "age"=>30];

$person['addr'] = "Sudan";

print_r($person) 

เอาท์พุท

Array( ["name"=>"mohammed", "age"=>30, "addr"=>"Sudan"] )



1

มีวิธีที่ดีกว่านี้:

หากอาร์เรย์ $ arr_options มีอาร์เรย์ที่มีอยู่

$arr_new_input['name'] = [
    'type' => 'text', 
    'label' => 'First name', 
    'show' => true, 
    'required' => true
];

$arr_options += $arr_new_input;

คำเตือน: ต้องมี $ arr_options ถ้า $ arr_options มี ['name'] อยู่แล้วจะถูกเขียนทับ

หวังว่านี่จะช่วยได้



0

คุณสามารถใช้ array_merge ($ array1, $ array2) เพื่อรวมอาร์เรย์ที่เชื่อมโยงกัน ตัวอย่าง:

$a1=array("red","green");
$a2=array("blue","yellow");
print_r(array_merge($a1,$a2));

เอาท์พุต:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.