使用函数返回关联数组的所有键

时间:2014-02-07 17:41:21

标签: php arrays explode

我有一个关联数组,如下所示:

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)

感谢。

3 个答案:

答案 0 :(得分:1)

每次循环时都会覆盖$keys变量,所以它总是只设置为最后一个。

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

...如果你真的想要一个以逗号分隔的列表,那么将返回一个实际的数组结构,而不是return implode(', ', $keys);

答案 1 :(得分:0)

您可以使用array_keys($ array)而不是循环两次。

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

答案 2 :(得分: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"
}