2010-06-27 101 views
3

如何使數字在其中的鍵是數字和字符串。作爲字符串和數字的數組鍵

<?php 
$array = array 
(
    'test' => 'thing', 
    'blah' => 'things' 
); 

echo $array[0]; // thing 
echo $array[1]; // things 

echo $array['test']; // thing 
echo $array['blah']; // things 
?> 
+0

你的問題是不明確的,你想要什麼/是什麼意思? – Sarfraz 2010-06-27 15:00:08

+0

這將無法可靠地工作。聯合數組中項目的順序不取決於它們的輸入順序。數組中的第一個元素可能是'blah'而不是'test'。 – dbemerlin 2010-06-27 15:09:46

+0

@dbemerlin:你有參考文件支持你的評論嗎?我一直認爲關聯數組是按照插入的順序排序的,但我在手冊中找不到任何說明這種或那種方式的東西。 – grossvogel 2010-06-27 15:30:11

回答

2
$array = array_values($array); 
實施

但你爲什麼需要這個?你能擴展你的例子嗎?

+0

我需要原始的鍵,試圖給一個字符串鍵值,我只有號碼 – NoOne 2010-06-27 15:07:06

1

你可以實現自己的類 「實現了ArrayAccess」

對於這樣的類,你可以手動處理這種行爲

UPD:只是爲了好玩

class MyArray implements ArrayAccess 
{ 
    private $data; 
    private $keys; 

    public function __construct(array $data) 
    { 
     $this->data = $data; 
     $this->keys = array_keys($data); 
    } 

    public function offsetGet($key) 
    { 
     if (is_int($key)) 
     { 
      return $this->data[$this->keys[$key]]; 
     } 

     return $this->data[$key]; 
    } 

    public function offsetSet($key, $value) 
    { 
     throw new Exception('Not implemented'); 
    } 

    public function offsetExists($key) 
    { 
     throw new Exception('Not implemented'); 
    } 

    public function offsetUnset($key) 
    { 
     throw new Exception('Not implemented'); 
    } 
} 

$array = new MyArray(array(
    'test' => 'thing', 
    'blah' => 'things' 
)); 

var_dump($array[0]); 
var_dump($array[1]); 
var_dump($array['test']); 
var_dump($array['blah']); 
2

您可以使用array_keys生成一個查找數組:

<?php 
$array = array 
(
    'test' => 'thing', 
    'blah' => 'things' 
); 
$lookup = array_keys ($array); 
// $lookup holds (0=>'test',1=>'blah) 

echo $array[$lookup[0]]; // thing 
echo $array[$lookup[1]]; // things 

echo $array['test']; // thing 
echo $array['blah']; // things 
?> 
+0

是的,它的工作和最好的解決方案 – NoOne 2010-06-27 15:12:40