2014-02-07 37 views
0

我有一個關聯數組,看起來像這樣:返回關聯數組的所有鍵與功能

Array ( 
[0] => Array () 
[1] => Array () 
[2] => Array ([318] => 3.3333333333333) 
[3] => Array () 
[4] => Array () 
[5] => Array ([317] => 5) 
) 

我想返回數組數,而不是字符串的所有數組鍵;那就是爲什麼我不迴應它。這是我正在嘗試:

function user_rated_posts(){ 
    global $author; 

if(isset($_GET['author_name'])) : 
$curauth = get_userdatabylogin($author_name); 
else : 
$curauth = get_userdata(intval($author)); 
endif; 

$user_rated_posts = get_user_meta($curauth->ID, 'plgn_rating',true); 
foreach ($user_rated_posts as $arrs){ 
    foreach($arrs as $key=> $value){ 
     $keys= $key; 
     } 
    } 
return $keys; 
} 

當我打電話這樣的功能:

array(explode(',',user_rated_posts())) 

我只得到這個

array(317) 

我試圖讓所有的鍵逗號分隔格式,如:

array(318, 317) 

謝謝。

+7

'$鍵[] = $鍵;' – moonwave99

回答

1

你每次你通過你的循環時間覆蓋$keys變量,所以它總是隻設置到最後一個。

$keys = array(); 
foreach ($user_rated_posts as $arrs) { 
    foreach($arrs as $key=> $value){ 
     $keys[] = $key; 
    } 
} 
return $keys; 

...這將返回一個實際的陣列結構,如果你真的想要一個逗號分隔的列表,然後return implode(', ', $keys);代替。

0

你可以使用array_keys($陣列),而不是循環的兩倍。

$keys = array(); 
foreach ($user_rated_posts as $arrs) { 
    $keys = array_merge($keys, array_keys($array)); 
} 
return $keys; 
0

我想出了避免支持PHP的內置函數的嵌套循環的方式:

$result = array_map(array_keys,$user_rated_posts); 
$result2 = array_map(implode, $result); 
$result3 = array_filter($result2); 

陣列上方第一行迭代,返回鍵。第二行將子數組縮減爲字符串。第三行刪除空值。

這裏是一個工作版本:https://eval.in/99119

額外的好處:保持其中的值被發現像鑰匙的位置:

array(2) { 
    [2]=> 
    string(3) "318" 
    [5]=> 
    string(3) "317" 
} 
相關問題