Thêm một mục vào một mảng kết hợp


88
//go through each question
foreach($file_data as $value) {
   //separate the string by pipes and place in variables
   list($category, $question) = explode('|', $value);

   //place in assoc array
   $data = array($category => $question);
   print_r($data);

}

Điều này không hoạt động vì nó thay thế giá trị của dữ liệu. Làm cách nào để tôi có thể thêm một giá trị liên kết vào mỗi vòng lặp? $file_datalà một mảng dữ liệu có kích thước động.

Câu trả lời:


96

Tôi nghĩ bạn muốn $data[$category] = $question;

Hoặc trong trường hợp bạn muốn một mảng ánh xạ các danh mục với mảng câu hỏi:

$data = array();
foreach($file_data as $value) {
    list($category, $question) = explode('|', $value, 2);

    if(!isset($data[$category])) {
        $data[$category] = array();
    }
    $data[$category][] = $question;
}
print_r($data);

9
Các lập trình viên khác sẽ ghét bạn vì lỗi chính tả vì họ cũng sẽ bị buộc phải làm chúng hoặc sửa chúng.
ThiefMaster

Tôi đã quá thoải mái với array_push, quên những điều cơ bản! Thực sự hữu ích!
ĐẾN

122

Bạn chỉ có thể làm điều này

$data += array($category => $question);

Nếu bạn đang chạy trên php 5.4+

$data += [$category => $question];

21
cái gì trên thế giới?
Phil

9
Đây là câu trả lời chính xác để thêm các mục vào một mảng liên kết.
andreszs

7
Đồng thời, hãy thêm nhiều phần tử: $ data + = ['x' => 1, 'y' => 2];
split 19

đây là cách nếu bạn không muốn kết thúc với nhiều hơn một đối tượng bên trong mảng
DragonFire

Lưu ý: điều này có thể hoạt động nếu mảng của bạn chưa có phần tử có cùng khóa nên không thể ghi đè lên một phần tử hiện có.
Mohamad Hamouday

29

trước vòng lặp for:

$data = array();

thì trong vòng lặp của bạn:

$data[] = array($catagory => $question);

2
Nếu bạn làm theo cách đó, đừng quên init mảng trước bằng cách sử dụng $ data = array (); hoặc nếu không php sẽ ném một thông báo
Alex Bailey

Tôi nghĩ SO lưu vào bộ nhớ cache câu trả lời của tôi, vì vậy khi đăng nó, tôi nhận ra rằng tôi không thấy nó được khởi tạo trong mã của anh ấy. Vì vậy, tôi đã thêm nó và tôi đã thấy bình luận của bạn sau đó, cảm ơn bạn :-)
moe

4
Điều này không hoạt động vì nó tạo ra một mảng bên trong mảng. Xin lỗi nếu câu hỏi của tôi loại bỏ bạn.
Phil

PHP 5.4+ bạn có thể viết ít mã hơn một chút:$data=[]; $data[] = [$category => $question];
Justin

$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];không thành công với chỉ mục Không xác định: foo in .. , nhưng dấu cộng được đề xuất dưới đây hoạt động.
qrtLs

7

Tôi biết đây là một câu hỏi cũ nhưng bạn có thể sử dụng:

array_push($data, array($category => $question));

Điều này sẽ đẩy arraydòng điện của bạn kết thúc array. Hoặc nếu bạn chỉ đang cố gắng thêm các giá trị đơn lẻ vào cuối mảng của mình chứ không phải thêm mảng thì bạn có thể sử dụng điều này:

array_push($data,$question);

6

Đối với bất kỳ ai cũng cần thêm vào mảng kết hợp 2d, bạn cũng có thể sử dụng câu trả lời được đưa ra ở trên và sử dụng mã như thế này

 $data[$category]["test"] = $question

sau đó bạn có thể gọi nó (để kiểm tra kết quả bằng cách:

echo $data[$category]["test"];

cái nào sẽ in $ câu hỏi

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.