2010-08-05 39 views
6

Tôi có một đối tượng với một khóa duy nhất và giá trị của nó. Nhưng tôi không biết chìa khóa để truy cập nó. Cách hiệu quả nhất để lấy khóa mà không liệt kê đối tượng là gì?PHP: lấy một khóa duy nhất từ ​​đối tượng

+0

Vậy làm cách nào để bạn biết mình có khóa chính xác? – NullUserException

+0

Bạn đang tìm cách thực hiện 'mảng_search'? –

+2

Tôi chỉ có một đối tượng json được chuyển đổi thành php như '{" foo ": 3}' và tôi cần lấy cả hai, tên khóa và giá trị. – Pablo

Trả lời

21

Nếu bạn chỉ muốn truy cập giá trị, bạn không cần chìa khóa (trên thực tế tên thuộc tính) tại tất cả:

$value = current((array)$object); 

Nếu bạn thực sự muốn tên tài sản, hãy thử này:

$key = key((array)$object); 
+0

Tôi có một mảng các đối tượng và các đối tượng có một thuộc tính, và tôi không biết tên của các thuộc tính. Tôi đang lặp qua mảng bằng cách sử dụng vòng lặp 'foreach' và đối với mỗi đối tượng, tôi muốn khóa cũng như giá trị. Tôi đã tìm thấy giải pháp này, nhưng nó không phải là không hiệu quả bởi vì bạn đang đúc các đối tượng $ để một mảng mỗi lần? (Xin lỗi nếu nó là quá cơ bản, nhưng tôi là một newb. Một câu trả lời sẽ được đánh giá rất nhiều, vì tôi không chắc chắn cho dù đó là khôn ngoan để sử dụng này hay không) .. – Solace

3
$array = array("foo" => "bar"); 

$keys = array_keys($array); 

echo $keys[0]; 

// Output: foo 

Xem: http://php.net/manual/en/function.array-keys.php

+0

Điều này thực sự làm việc cho một đối tượng? 'stdClass :: __ set_state (mảng ( 'tag1' => 1, ))' – Pablo

+0

@Michael: Sai lầm của tôi, tôi cho rằng bạn đang cố truy xuất khóa từ mảng. Trong trường hợp đó, bạn sẽ muốn đưa đối tượng vào một mảng có nhiều khả năng nhất. Xem ví dụ của @ thomasrutter: http://stackoverflow.com/questions/3411495/php-get-a-single-key-from-object/3411520#3411520 – gpmcadam

+0

Ban đầu tôi đã bị nhầm lẫn do sử dụng từ "khóa" , đó là một thuật ngữ mảng ... – deceze

4

Bạn có thể cast đối tượng đến một mảng như thế này:

$myarray = (array)$myobject; 

Và sau đó, đối với một mảng mà chỉ có một giá trị duy nhất, điều này sẽ lấy chìa khóa cho giá trị đó.

$value = key($myarray); 

Bạn có thể làm cả hai thứ đó trong một dòng nếu muốn. Tất nhiên, bạn cũng có thể làm điều đó bằng cách liệt kê đối tượng, như bạn đã đề cập trong câu hỏi của bạn.

Để có được giá trị chứ không phải là chìa khóa, sau đó:

$value = current($myarray); 
Các vấn đề liên quan