2016-11-30 28 views
1

我有一個數組..充分利用關聯數組PHP的值

$file=array(
    'uid' => '52', 
    'guarantee_id' => '1116', 
    'file_id' => '8', 
    'file_category' => 'test', 
    'meta' =>'{"name":"IMAG0161.jpg","type":"image\/jpeg","tmp_name":"\/tmp\/phpzdiaXV","error":0,"size":1749244}', 
    'FileStorage' => array() 
) 

,我試圖提取使用

$fileName = $file['meta'['name']; 

,給了我一個非法串抵消名「name」錯誤。

+3

'$ file ['meta']'的值是一個字符串,而不是一個數組。 – arkascha

回答

1

發生這種情況,因爲你的元是json,所以你應該解碼,然後訪問你需要什麼,而不是我把true作爲第二個參數監守我想解碼作爲associative array而不是object

$decoded = json_decode($file['meta'],true); 
echo $decoded['name']; 
//print IMAG0161.jpg 

您可以檢查現場演示here

但是你可以很容易地爲obect

$decoded = json_decode($file['meta']); 
echo $decoded->name; 
//print IMAG0161.jpg 
訪問

您可以檢查現場演示here

2

$file['meta']的值是一個字符串,而不是一個數組。這意味着您訪問該值的方法不起作用。

看起來像元值字符串是一個json編碼的對象。如果是這樣,你可以解碼它,然後訪問結果對象的屬性「名稱」。

看看這個例子:

<?php 
$file = [ 
    'uid' => '52', 
    'guarantee_id' => '1116', 
    'file_id' => '8', 
    'file_category' => 'test', 
    'meta' =>'{"name":"IMAG0161.jpg","type":"image\/jpeg","tmp_name":"\/tmp\/phpzdiaXV","error":0,"size":1749244}', 
    'FileStorage' => [] 
]; 

$fileMeta = json_decode($file['meta']); 
var_dump($fileMeta->name); 

輸出顯然是:

string(12) "IMAG0161.jpg" 

在PHP中的較新版本可以簡化一下:你不必存儲解碼對象的顯式變量,但可以直接訪問屬性:

json_decode($file['meta'])->name 

這個的輸出顯然和上面一樣。

+0

將JSON obect作爲對象留下,而不是將其轉換爲數組+1 – RiggsFolly

0
<?php 
$file=array(
    'uid' => '52', 
    'guarantee_id' => '1116', 
    'file_id' => '8', 
    'file_category' => 'test', 
    'meta' =>'{"name":"IMAG0161.jpg","type":"image\/jpeg","tmp_name":"\/tmp\/phpzdiaXV","error":0,"size":1749244}', 
    'FileStorage' => array() 
); 
$meta=$file['meta']; 
$json=json_decode($meta); 
echo $json->name; 

?>