2013-08-23 76 views
5

Thứ sáu vui vẻ Tất cả,Đặt tên và tham chiếu biến động động (ColdFusion)

Đã cố gắng giải quyết lỗi này trong vài ngày. Những gì tôi đang tìm kiếm để làm là tự động tạo ra một biến bằng cách sử dụng một sự kết hợp của một chuỗi cố định và một biến (số).

Tôi đang truy vấn một DB để lấy danh sách các đại lý và sau đó tôi muốn tạo các biến riêng lẻ cho từng tác nhân để giữ các thống kê khác nhau. Tôi đang tìm cách lấy chỉ số hiện tại trong vòng lặp (tức là, vé được tạo) và sau đó thêm từng ID đại lý vào cuối.

Tôi đang gọi stat đầu tiên này là GC cho Get Created do đó biến mẫu với ID hiện tại và ID tác nhân sẽ là một cái gì đó như GC1.

Tôi đã Googled và đọc nhiều, nhiều mẹo khác nhau, hướng dẫn, v.v. nhưng hầu hết trong số đó là lỗi thời (2002!) Hoặc dường như dựa trên các truy vấn và mảng. Tôi đang tìm kiếm một cái gì đó đơn giản hơn nhiều (hoặc vì vậy tôi tin).

Tôi biết tôi sẽ có thể tự động tạo ra các biến sử dụng một cái gì đó dọc theo dòng (AID = Agent ID):

<cfset "GC#AID#" = getCreated.RecordCount> 

Bây giờ, tôi nhận được không có lỗi vì vậy tôi giả định các biến là được tạo ra một cách chính xác tuy nhiên khi tôi đi đến đầu ra biến là nơi tôi thực sự đi vào một vấn đề (hoặc vì vậy tôi nghĩ).

Không có vấn đề bao nhiêu cách khác nhau tôi cố gắng này đầu ra luôn luôn là GC1. Thay vào đó, tôi muốn giá trị của biến được hiển thị, không phải là tên biến.

Tôi biết tôi không muốn sử dụng đánh giá và tôi đã thấy nhiều ví dụ trên các trang web khác và trên SO về việc sử dụng ký pháp struct tuy nhiên chúng luôn được kết hợp với truy vấn.

Tôi cảm thấy mình phải thiếu thứ gì đó rất đơn giản ở đây. Bất kỳ suy nghĩ nào về cách tôi có thể xuất ra giá trị của biến được tạo động bên ngoài ngữ cảnh của truy vấn?

Xin lỗi vì lời giải thích kéo dài, chỉ muốn đảm bảo tôi rõ ràng.

Vui lòng cho tôi biết nếu có giải thích rõ ràng sẽ hữu ích.

Tôi đang sử dụng ColdFusion 10 nếu điều đó có liên quan.

Cảm ơn trước!

EDIT 1

Đây là những gì tôi đang có đối với Bộ luật Output:

<cfset test = "GC#variables.AID#"> 
Test: <cfoutput>#test#</cfoutput> 

Tôi nhận ra điều này có lẽ khỏi dấu ấn.

+0

Vì vậy, mã đầu ra của bạn ở đâu? Đó là mã bạn đang gặp sự cố, nhưng bạn không đăng nó. –

+0

@JasonDean Apologies, bổ sung. –

+0

Xem câu trả lời của tôi bên dưới. Tôi nghĩ nó sẽ trả lời câu hỏi của bạn. Trong ví dụ trên, bạn chỉ định giá trị GC1 cho phép thử biến. Bạn có thể mong đợi đầu ra nào khác khi đầu ra # test # của bạn? –

Trả lời

14

Một Option:

Thiết lập một tên biến động:

<cfset variables["GC" & AID] = "Testing" /> 

Output giá trị của tên biến động:

<cfoutput>#variables["GC" & AID]#</cfoutput> 

Lựa chọn khác:

Thiết lập một năng động tên biến:

<cfset variables["GC#AID#"] = "Testing" /> 

Output giá trị của tên biến động:

<cfoutput>#variables["GC#AID#"]#</cfoutput> 
+1

Cảm ơn bạn rất nhiều Jason. Rất dễ hiểu và làm việc hoàn hảo! –

1

Tất cả các phạm vi biến là cấu trúc. Vì vậy, lặp qua phạm vi đó như là một cấu trúc. Khi mã của bạn được viết, nó nằm trong phạm vi biến. Tôi đặt nó vào cấu trúc riêng của nó, nhưng đây là phiên bản bị tấn công của những gì bạn đang cố gắng làm:

<cfloop collection="#variables#" item="k"> 

    <cfif left(k,2) eq "GC"> 
     <cfoutput>#k# : #variables[k]#</cfoutput><br/> 
    </cfif> 

</cfloop>