2010-08-05 15 views
6

Tek bir tuşa ve değerine sahip bir nesnem var. Ama ona erişimin anahtarını bilmiyorum. Nesneyi numaralandırmadan anahtarı almanın en etkili yolu nedir?PHP: nesneden tek bir anahtar al

+0

Doğru tuşa sahip olduğunuzu nereden biliyorsunuz? – NullUserException

+0

Bir 'array_search' yapmak için mi arıyorsunuz? –

+2

Sadece "jp": 3} 'e dönüştürülmüş tek bir json nesnesine sahibim ve her ikisini de, anahtar adını ve değerini almam gerekiyor. – Pablo

cevap

21

sadece hiç erişim değeri, anahtarı gerekmez (aslında özellik adı) isterseniz: Eğer gerçekten özellik adı istiyorsanız

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

, şunu deneyin:

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

Nesneler bir dizi var ve nesnelerin her biri bir özelliği var ve özellikleri isimleri bilmiyorum. 'Foreach' döngüsünü kullanarak dizi boyunca yineliyorum ve her nesne için anahtarın yanı sıra değer istiyorum. Bu çözümü buldum, ancak verimsiz değil, çünkü $ nesnesini her seferinde bir diziye çeviriyorsunuz? (Üzgünüm, eğer çok basitse, ama ben bir yeniyim. Bir cevabı takdir edeceğim, çünkü bunu kullanmak akıllıca olup olmadığından emin değilim). – Solace

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

$keys = array_keys($array); 

echo $keys[0]; 

// Output: foo 

bakınız: Böyle bir diziye nesneyi yayınlayabileceğim http://php.net/manual/en/function.array-keys.php

+0

Bu gerçekten bir nesne için çalışıyor? 'stdClass :: __ set_state (dizi ( 'tag1' => 1, )) – Pablo

+0

@Michael: Hatam, anahtarı bir diziden almaya çalıştığınızı varsaydım. Bu durumda, nesneyi büyük olasılıkla bir diziye çevirmek isteyeceksiniz. @ Thomasrutter'ın örneğine bakın: http://stackoverflow.com/questions/3411495/php-get-a-single-key-from-object/3411520#3411520 – gpmcadam

+0

İlk başta "anahtar" kelimesinin kullanılmasıyla yanıltılmıştım , bir dizi terimdir ... – deceze

4

:

$myarray = (array)$myobject; 

Ve sonra, sadece tek bir değere sahip bir dizi için, bu anahtarı getir gerektiğini bu değer için.

$value = key($myarray); 

İsterseniz bunları bir satırda yapabilirsiniz. Elbette, nesneyi numaralandırarak da yapabilirsiniz, sorunuzda bahsettiğiniz gibi.

sonra, anahtarın yerine değeri almak için:

$value = current($myarray); 
İlgili konular