2011-07-06 29 views
11

Tôi muốn có một hàm lấy mảng làm đầu vào và thay đổi một số giá trị của mảng (trong trường hợp của tôi mảng là $ _SESSION nhưng tôi nghĩ nó không thực sự maters).Làm thế nào tôi có thể viết bằng PHP một hàm có thể sửa đổi một mảng?

Tôi có thể làm như thế nào?


THÊM

Nghe có vẻ tầm thường. Nhưng nó không phải như vậy. Tôi chỉ muốn thiết lập các giá trị nhất định cho mảng. Ví dụ, tôi muốn hàm của tôi thay đổi $ _SESSION ['x'] và $ _SESSION ['y']. Theo như tôi biết, nếu tôi vượt qua một mảng như một đối số, sau đó bất kỳ thay đổi của đối số sẽ không sửa đổi mảng ban đầu. Ví dụ:

function change_array($x) { 
    $x[0] = 100; 
} 
$x = array(1,2,3); 
change_array($x); 

Nó sẽ không thay đổi $ x.


THÊM 2

Tại sao câu hỏi của tôi là xuống bình chọn? Tôi nghĩ rằng câu hỏi không quá tầm thường bất chấp thực tế là nó ngắn. Tôi cũng nghĩ rằng tôi đã đưa ra tất cả các chi tiết liên quan. Theo như tôi nhận ra (nhờ một câu trả lời) nó là về "đi qua một tham chiếu". Hơn nữa, thực tế là tôi muốn sửa đổi mảng $ _SEESION làm cho nó có một chút khác biệt.

+0

Vui lòng cụ thể hơn. Bạn có kế hoạch thao tác gì khi thực hiện mảng? –

+0

Tại sao bạn muốn chuyển '$ _SESSION' làm đối số: O?!? Nó đã toàn cầu rồi !!! –

Trả lời

21

những gì bạn có nghĩa là cuộc gọi của nó: Passing by Reference

của nó rất đơn giản như

function changearray(&$arr){ 
    $arr['x'] = 'y'; 
} 

bạn có thể gọi đây như:

changearray($_SESSION); 
+0

Tôi nghĩ đó là chính xác những gì đã được yêu cầu. Một số người nói rằng $ _SESSION là một mảng "đặc biệt" (vì nó là toàn cục). Nó có nghĩa là tôi nên đối xử với nó một cách khác nhau (ví dụ tôi không nên vượt qua nó bằng cách tham khảo. Hơn nữa, tôi không cần phải vượt qua nó như là một đối số)? – Roman

+1

họ quyền toàn cầu của nó và bạn không cần phải vượt qua nó, nhưng tôi muốn tìm hiểu u làm thế nào để đi qua tham khảo trong php –

+1

Cảm ơn rất nhiều! Thật tuyệt khi bạn có thể nhận được những gì tôi cần từ câu hỏi ban đầu rất ngắn của tôi. Cảm ơn. – Roman

0

Các mã hóa là như sau: -

$_SESSION['index_1'] = 'value 1'; 
$_SESSION['index_2'] = 'value 2'; 

Nếu bạn muốn thay đổi các giá trị cho các chỉ số "index_2" để đánh giá "value 2 changed", sau đó bạn chỉ đơn giản viết: -

$_SESSION['index_2'] = 'value 2 changed'; 

Hy vọng nó giúp.

+0

Như tôi đã đề cập trong bài gốc, tôi muốn có một hàm vì chuỗi các phép tính cần thiết để tạo ra một giá trị mới là lớn (vì vậy, tôi muốn đặt mọi thứ vào một hàm). – Roman

-1
function change_array() { 

    global $x; /*this will tell the function to work on the array 'x' out of the function itself.*/ 
    $x[0] = 100; 

} 
Các vấn đề liên quan