我有一个关联数组,如下所示:
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)
感谢。
答案 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"
}