2014-09-27 52 views
0

我有一個JSON字符串變成了一個數組。使用數組中的值作爲索引

這是一個設備列表,每個設備都有名稱,狀態等,以及一個名爲ref的獨特參考。

我可以

echo $json_array_a[Devices][0][ref] 

訪問第一裝置在我的數組,並將其將返回正確的裁判該設備(即11)。

我想改變我的陣列中使用的裁判作爲索引,所以我會用得到相同的設備名稱:

echo $json_array_a[Devices][11][name] 

如何才能做到這一點?

+0

這可以通過修改腳本來完成。 – 2014-09-27 10:30:25

+0

你需要修改你的數組的結構才能做到這一點。 – 2014-09-27 10:31:13

+0

是的,我需要修改結構 - 多數民衆贊成我正在尋找一種方法 – user1546642 2014-09-27 10:33:40

回答

0

嘗試一些類似:

$new_array = array(Devices => array()); 
foreach ($json_array_a[Devices] as $value) { 
    $new_array[Devices][$value[ref]] = $value; 
} 

現在$new_array應包含索引陣列,只要你想。

但請注意,如果您的任何參考文件重複,那麼只有最後一個出現在原始數組中的文件纔會出現在新數組中,因爲它會覆蓋以前的任何值。

此外,你使用ref/name/Devices沒有任何引號 - 我在這裏保留了相同的內容,但我假設那些是字符串,因此應該用引號括起來作爲'ref'/'name '/'設備'?

+0

字符串應該被引用,是的。 – 2014-09-27 10:41:56

+0

這樣做!裁判總是獨一無二的。現在我需要重新加載json和reindexing,並且使用這些值更新50+ div ...我知道這不能解決這個問題,但我預見了我需要更多的幫助:-)謝謝! – user1546642 2014-09-27 10:51:51

0

這應該工作:

function getDeviceName($devices,$index) 
{ 
    $ref = $devices[$index]['ref']; 
    return $devices[$ref]['name']; 
} 

試試看吧。哦,你使用這樣的:

echo getDeviceName($json_array_a['Devices'],0); 

調用的東西$json_array_a不是編程的方式。數組的名稱應該反映它的內容,而不是它的創建方式。我試着在函數中正確地做到這一點。

+0

我明白你的意思,你說得對。新的命名是$ devices_a(我讓a提醒我這是一個數組)。所以基本上我想要做的是循環$ devices_a並獲得$ reindexed_devices_a – user1546642 2014-09-27 10:40:11