2010-12-27 21 views
8

Tôi đang nhận dữ liệu từ một mảng. Đối với một số lý do mảng có các giá trị quan trọng như [3.3] mà tôi đang gặp sự cố khi truy xuất dữ liệu.Làm việc với một mảng có dấu chấm trong các giá trị khóa

Tôi có mảng này [3.3] => First Name [3.6] => Last Name[2] => [email protected].

Khi tôi cố gắng gọi $array[3.3] nó trả về null, nhưng khi tôi gọi $array[2] Tôi được cung cấp e-mail. Bất kỳ ý tưởng?

Trả lời

21

Sử dụng dấu nháy đơn khi tham khảo giá trị quan trọng (về cơ bản đối xử với nó như một chuỗi, đó là những gì PHP có lẽ làm)

echo $array['3.3']; 
+2

Cảm ơn đã làm các trick. Tôi không biết tại sao tôi không nghĩ như vậy :). – BandonRandon

+0

Dấu hiệu "Lifesaver"! :) –

+2

một điều: nếu '3.0' của bạn là bởi bất kỳ cơ hội trong một biến (tức là '$ x = '3.0';') và bạn đang cố gắng để làm '$ myarr [$ x] =" Wow! " , bạn sẽ cần phải làm một cái gì đó như '$ myarr [" '{$ x}' "] =" Wow! "'. Chỉ 5 xu của tôi ... – hummingBird

2

Tôi đoán nó có cái gì cần làm với PHP autocasting 3.3 => nổi

thử $ array [ '3.3']

13

Từ php dẫn sử dụng:

Floats trong chủ chốt được cắt ngắn thành số nguyên.

Vì vậy, bạn đang cố gắng để có được $ array [3] mà không tồn tại, vì vậy bạn sẽ có được Null

+0

Để tham khảo: https://bugs.php.net/bug.php? id = 32671 – RedGlobe

8

Một khóa có thể là một số nguyên hoặc một chuỗi. Nếu khóa là biểu diễn chuẩn của một số nguyên, nó sẽ được hiểu là như vậy (tức là "8" sẽ được hiểu là 8, trong khi "08" sẽ được hiểu là "08"). Nổi trong khóa được cắt ngắn thành số nguyên. Các kiểu mảng được lập chỉ mục và liên kết là cùng loại trong PHP, có thể chứa cả số nguyên và chuỗi chỉ mục.

Từ một phao sẽ luôn luôn được cắt ngắn là một số nguyên (ví dụ 3.3 sẽ luôn luôn được giải thích bởi các mảng như 3) Tôi tự hỏi, nếu mảng của bạn được mong đợi một String không phải là một phao . Bạn đã thử $ array ["3,3"] thay vì $ array [3,3] chưa?

+2

"" 8 "sẽ được hiểu là 8."Cần lưu ý rằng trên nền tảng mà INT sử dụng 32 bit, khi chuỗi nằm trong biểu diễn chuẩn của một số nguyên cần nhiều hơn 32 bit (ví dụ" 3206519370 "), thì nó sẽ giữ nguyên như chuỗi khóa và sẽ không được chuyển đổi để int (mà sẽ dẫn đến tràn). – JohnM2

0

Floatssố chuỗi trong khóa được cắt ngắn để nguyên.

Vì vậy, sản lượng mã này:

$array = [1 => "a", "1" => "b", 1.5 => "c", true => "d"]; 
print_r($array); 

sẽ là:

Array 
(
    [1] => d 
) 
Các vấn đề liên quan