【问题标题】:PHP Group arrays by parameters on filtered queryPHP按过滤查询的参数对数组进行分组
【发布时间】:2018-09-13 21:56:52
【问题描述】:

我上了三门课:

    class libro {

       var $id; 
       var $name;
       var $editorial;
       var $materia = array();

       [... getters and setters ]

    class editorial {

       var $name; 
       var $id;
       [...]

    class materia {

       var $name; 
       var $id;
       [...]

这是一个网站目录,我从一个 xml 文件中获得了大量书籍。效果很好,我检查过;我收到的 xml 值很好。

在我网站的目录中,我有一个侧栏。默认情况下,显示所有社论材料(类别),以及所有书籍。

因此,当我单击一篇社论/材料的复选框时,页面会使用来自 xml 的新查询重新加载,其中一个已被过滤。显示了目录中的书籍,但另一方面,我只需要显示我签入的元素,其他元素在新的 xml 查询数据中分组研究。

例如,如果我选择社论 Great Books,页面将重新加载,仅在复选框上显示一篇社论,而在关于 Materias 的部分,我将看到数组中包含的所有内容(materia ) 在每本书中,按类别分组以不显示重复的类别。

例子的另一种方式:

如果我先按 Materia 进行搜索,新查询的社论也会被分组。如果我选择了社论并单击了一个类别,则只会显示选择的类别和社论,如果我先选择了类别,则会上下颠倒。

我正在使用 $_GET['editorial'] 和 $_GET['materia'] 处理新的查询数据。

这是我关于分组的代码...

$bookList = array();

// Here are methods where I set xml data to classes, and I get an array (link below)

$groupedBookList = array();

foreach ($bookList as $book){

    // ERROR IN LINE BELOW (Undefined offset: 0 in ...)
    $groupBL_Element = &$groupedBookList[$book->get_editorial()->get_id() . "_" .$libro->get_materia(0)->get_id() ]; 
    $groupBL_Element['editorial'] = $book->get_editorial()->get_id();
    $groupBL_Element['materia'] = $book->get_materia(0)->get_id();

}

return array_values($groupedBookList);

goo.gl/397Wuz

有人知道如何分组吗?谢谢

我得到的错误是:

未定义的偏移量:0 in(我选择的行)

【问题讨论】:

  • 为什么是 $book->get_materia(0) ?? $book是每个循环中的当前书,为什么要传'0'?
  • 因为在这种情况下,我只想得到第一个
  • var $id; -- 你看过新闻吗?当前的 PHP 版本是 7.2 和过时的 PHP 4 语法,用于声明您使用的对象属性 makes the properties public。因此,他们不需要任何 getter 和 setter(无论如何,大多数时候这是不好的做法)。恕我直言,提供免费访问其属性的类(无论它们是public 还是通过getter 和setter)不是OOP,而是变相的程序代码。

标签: php xml wordpress grouping getter-setter


【解决方案1】:

我不确定这是否是您正在寻找的,但如果您添加到您的 foreach:

foreach ($bookList as $book){

$groupBL_Element = &$groupedBookList[$book->get_editorial()->get_id() . "_" .$libro->get_materia(0)->get_id() ];
$groupBL_Element['editorial'] = $book->get_editorial()->get_id();
$groupBL_Element['materia'] = $book->get_materia(0)->get_id();

$groupedBookList[] = $groupBL_Element;

}

然后您可以返回 $groupedBookList 并将您的元素分组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 2021-09-05
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多