Làm thế nào để đẩy cả giá trị và khóa vào mảng PHP


355

Hãy xem mã này:

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

Tôi đang tìm kiếm một cái gì đó như thế này để:

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

Có một chức năng để làm điều này? (vì array_pushsẽ không hoạt động theo cách này)

Câu trả lời:


759

Không, không có array_push()tương đương cho các mảng kết hợp bởi vì không có cách nào xác định khóa tiếp theo.

Bạn sẽ phải sử dụng

$arrayname[indexname] = $value;

10
Tôi không hiểu Đây không phải là cách bình thường để thêm các mục vào một mảng sao?
tiền lãi

Làm thế nào để thêm nhiều khóa và giá trị vào một mảng? ví dụ: tôi có [indexname1] = $ value1 và [indexname2] = $ value2 và tôi muốn thêm chúng vào $ Arrayname
King Goeks

8
@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2);sẽ đặt chúng làm vật phẩm duy nhất trong $arrayname. Nếu bạn đã $arraynamethiết lập và muốn giữ các giá trị của nó, hãy thử $arrayname += $anotherarray. Hãy nhớ rằng bất kỳ khóa hiện có trong mảng đầu tiên sẽ bị ghi đè bởi lần thứ hai.
Charlie Schliesser

1
"Hãy ghi nhớ bất kỳ khóa hiện có nào trong mảng đầu tiên sẽ bị ghi đè bởi lần thứ hai" điều đó không đúng, mảng đầu tiên được ưu tiên. nếu bạn làm $a = array("name" => "John"); $a += array("name" => "Tom");thì $a["name"]sẽ là "John"
santiago arizti

đó là cách dễ nhất
NomanJaving

75

Đẩy một giá trị vào một mảng sẽ tự động tạo một khóa số cho nó.

Khi thêm một cặp khóa-giá trị vào một mảng, bạn đã có khóa, bạn không cần phải tạo một cặp cho bạn. Đẩy một phím vào một mảng không có ý nghĩa. Bạn chỉ có thể đặt giá trị của khóa cụ thể trong mảng.

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

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

66

Bạn có thể sử dụng toán tử union ( +) để kết hợp các mảng và giữ các khóa của mảng đã thêm. Ví dụ:

<?php

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

print_r($arr3);

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

Vì vậy, bạn có thể làm $_GET += array('one' => 1); .

Có thêm thông tin về việc sử dụng toán tử union so với array_mergetrong tài liệu tại http://php.net/manual/en/feft.array-merge.php .


4
Sự khác biệt cơ bản giữa array_merge()+toán tử là khi 2 mảng chứa các giá trị trên cùng một +toán tử khóa bỏ qua giá trị từ mảng thứ hai (không ghi đè), nó cũng không đánh số lại / reindex các phím số ...
jave.web

Cảm ơn bạn, tôi đã thử nhiều chức năng mảng nhưng câu trả lời của bạn đã giúp tôi đạt được những gì tôi muốn,
Tiếng Đan Mạch

21

Tôi muốn thêm câu trả lời của tôi vào bảng và đây là:

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

hy vọng rằng điều này sẽ giúp được ai đó


1
Tôi đã xem qua hàng tá giải pháp và đây là giải pháp duy nhất phù hợp với trường hợp sử dụng của tôi. Cảm ơn bạn!
Ryan Burney

20

Chính xác những gì Pekka đã nói ...

Ngoài ra, bạn có thể có thể sử dụng Array_merge như thế này nếu bạn muốn:

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

Nhưng tôi thích phương pháp của Pekka hơn vì nó đơn giản hơn nhiều.


11

Tôi tự hỏi tại sao phương pháp đơn giản nhất chưa được đăng:

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

2
nó không hoàn toàn giống nhau, trong mảng_merge, mảng bên phải thắng trong xung đột chính, trong "+ =" mảng bên trái thắng
santiago arizti

@santiagoarizti Ý bạn là gì khi "chiến thắng"?
AlexioVay

1
nếu hai mảng có cả hai khóa giống nhau array_mergemảng union ( +=) hoạt động theo cách ngược lại, tức là Array_merge sẽ tôn trọng giá trị từ mảng thứ hai và liên kết mảng sẽ tôn trọng giá trị từ mảng đầu tiên.
santiago arizti

giải pháp hoàn hảo cho tôi. THX đã chia sẻ Alexio! :)
ThomasB

8

Đây là giải pháp có thể hữu ích cho bạn

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

Khi bạn đổ nó. Kết quả như thế này

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

Tôi chỉ tìm kiếm điều tương tự và tôi nhận ra rằng, một lần nữa, suy nghĩ của tôi lại khác bởi vì tôi là trường học cũ. Tôi quay trở lại BASIC và PERL và đôi khi tôi quên mất mọi thứ thực sự dễ dàng như thế nào trong PHP.

Tôi chỉ thực hiện chức năng này để lấy tất cả các cài đặt từ cơ sở dữ liệu trong đó có 3 cột. setkey, item (key) & value (value) và đặt chúng vào một mảng gọi là cài đặt bằng cách sử dụng cùng khóa / value mà không cần sử dụng cách đẩy như trên.

Khá dễ dàng và đơn giản thực sự

// Nhận tất cả cài đặt
$ settings = getGlobalSinstall ();


// Áp dụng lựa chọn chủ đề người dùng
$ theme_choice = $ settings ['theme'];

.. vv vv vv ....




hàm getGlobalSinstall () {

    $ dbc = mysqli_connect (wds_db_host, wds_db_user, wds_db_pass) hoặc chết ("Lỗi MySQL:". mysqli_error ());
    mysqli_select_db ($ dbc, wds_db_name) hoặc chết ("Lỗi MySQL:". mysqli_error ());
    $ MySQL = "CHỌN * TỪ cài đặt hệ thống";
    $ result = mysqli_query ($ dbc, $ MySQL);
    trong khi ($ row = mysqli_fetch_array ($ result)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; // KHÔNG CẦN PHẢI
        }
    mysqli_c Đóng ($ dbc);
trả về cài đặt $;
}


Vì vậy, giống như các bài viết khác giải thích ... Trong php, không cần phải "PUSH" một mảng khi bạn đang sử dụng

Khóa => Giá trị

VÀ ... Không cần phải xác định mảng trước.

$ mảng = mảng ();

Không cần xác định hoặc đẩy. Chỉ cần gán $ mảng [$ key] = $ value; Nó tự động là một đẩy và khai báo cùng một lúc.

Tôi phải thêm rằng vì lý do bảo mật, phép quay (P) oor (H) elrial (P), tôi có nghĩa là Lập trình cho Người giả, ý tôi là PHP .... hehehe Tôi đề nghị bạn chỉ sử dụng khái niệm này cho những gì tôi dự định. Bất kỳ phương pháp nào khác có thể là một rủi ro bảo mật. Ở đó, làm cho từ chối trách nhiệm của tôi!


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

Điều này chỉ hoạt động tốt. tạo khóa với giá trị của nó trong mảng


4
Bị hạ bệ. Điều này chỉ đẩy một mảng mới ở cuối $arrmảng hiện có .
AlexioVay

4

Hơi muộn một chút nhưng nếu bạn không phiền một mảng lồng nhau, bạn có thể thực hiện phương pháp này:

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

Để làm rõ, nếu bạn xuất json_encode ($ main_array) sẽ trông giống như [{"Key": "10"}]


4

Một chút kỳ lạ, nhưng điều này làm việc cho tôi

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

// in mảng ['key1' => "value1", 'key2' => "value2"]


2

xin chào tôi có cùng một vấn đề tôi tìm giải pháp này, bạn nên sử dụng hai mảng sau đó kết hợp cả hai

 <?php

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

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

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

print_r($c);

?>

tài liệu tham khảo: w3schools



2

Để thêm vào vị trí đầu tiên với keyvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;

2

Để đẩy "khóa" và "giá trị" sang một mảng hiện có, bạn có thể sử dụng +=toán tử phím tắt.

Xem ví dụ rất đơn giản này:

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

Kết quả của print_r($GET)sẽ là:

Array
(
    [one] => 1
)

1

Ví dụ mảng_merge () ....

$array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result);

Mảng ([màu] => xanh, [0] => 2, [1] => 4, [2] => a, [3] => b, [hình dạng] => hình thang, [4] => 4 ,)


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

Nó làm việc cho tôi.


Điều này thực thi $GET['one']=1, sau đó sử dụng giá trị trả về của câu lệnh đó (= 1, giá trị) và sau đó thực thi array_push($GET, 1). Kết quả = [0] -> 1, [một] -> 1
KekuSemau

0

Tôi đã viết một chức năng đơn giản:

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

để tôi có thể "nâng cấp" yếu tố mới một cách dễ dàng:

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

0

Có một số ví dụ tuyệt vời đã được đưa ra ở đây. Chỉ cần thêm một ví dụ đơn giản để đẩy các phần tử mảng kết hợp vào chỉ mục chỉ mục số gốc.

`$intial_content = array();

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

0

Tôi thường làm điều này:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.