PHP:使用嵌套的foreach循环创建唯一值列表


PHP: Creating list of unique values using nested foreach loops

很确定我的代码即将运行,但我遇到了一些困难。我使用的是Wordpress,它在第一个foreach循环中有一些函数来抓取当前用户编写的页面,但我知道这部分是有效的。我的重点是第二个循环,它旨在创建一个由唯一值(页面类别)组成的数组。

以前在这里直接回复用户时遇到过问题(计算机太旧,无法更新浏览器),所以提前感谢您的帮助!

$args= array('sort_column' => 'post_date', 'sort_order' => 'desc', 'authors' => $current_user -> user_login;
    $pages = get_pages($args);
$uniques = array();
    foreach ($pages as $page) { 
$categories = get_the_category($page->ID);
    foreach ($uniques as $unique) {
        if ( in_array($categories[0]->name, $unique) )
        {
        continue;
        }
array_push($unique, $categories[0]->name);
echo end($unique[0]);
echo '<br>';
echo $categories[0]->name;
    }
}

您的foreach ($uniques as $unique) {行出现问题。该循环将永远不会执行,因为$uniques总是空的。

已解决,感谢您的帮助!

$uniques = array ();
foreach ($pages as $page) {
$categories = get_the_category ($page->ID);
foreach ($categories as $category) {
    if ( ! in_array ($uniques, $category->name) ) {
        $uniques [] = $category->name;
    }
}
foreach ($uniques as $unique) {
    if (in_array ($categories [0]->name, $unique)) {
        continue;
    }
}

}

我认为您希望获得数组$uniques中类别的所有唯一值是正确的,而$categories[0]->name正在为您获取类别名称。

然后尝试使用php的array_unique()函数,然后可以使用array_values()对索引进行排序。

<?php 
$args= array('sort_column' => 'post_date', 'sort_order' => 'desc', 'authors' => $current_user -> user_login;
$pages = get_pages($args);
$uniques = array();
foreach ($pages as $page) { 
    $categories = get_the_category($page->ID);
    $uniques[]  = $categories[0]->name;
}
$uniques_arr = array_unique($uniques);
print_r($uniques_arr);
$uniques_sorted = array_values($uniques);
print_r($uniques_sorted);
?>

这将只为您提供所有页面中的第一个类别,因为我们只插入0索引。要获得所有页面的所有类别,请使用以下代码

<?php 
$args= array('sort_column' => 'post_date', 'sort_order' => 'desc', 'authors' => $current_user -> user_login;
$pages = get_pages($args);
$uniques = array();
foreach ($pages as $page) { 
    $categories = get_the_category($page->ID);
    foreach ($categories as $category) {
        $uniques[]  = $category->name;
    }
}
$uniques_arr = array_unique($uniques);
print_r($uniques_arr);
$uniques_sorted = array_values($uniques);
print_r($uniques_sorted);
?>