【问题标题】:Display an ID based with multiple category ID with loop in PHP在 PHP 中使用循环显示基于多个类别 ID 的 ID
【发布时间】:2021-12-15 02:32:08
【问题描述】:

我很抱歉标题,但我不知道如何在标题上解释它。 所以,这是我的情况。

我有一张桌子

id category subcategory
1 1 Apple
2 1 Orange
3 2 Car
4 2 Motorcycle

我想要做的是,做一些循环,输出在 PHP 中是这样的

<script type="text/javascript">
        const subkategoris = {
            "1":[
                {value:1,desc:"Apple"},
                {value:2,desc:"Orange"},
                ],
            "2":[
                {value:3,desc:"Car"},
                {value:4,desc:"Motorcycle"},
                ],
...etc
</script>

我已经尝试循环播放它,但是我得到的是这样的

<script type="text/javascript">
        const subkategoris = {
            "1":[
                {value:1,desc:"Apple"},
                ],
            "1":[
                {value:2,desc:"Orange"},
                ],
            "2":[
                {value:3,desc:"Car"},
                ],
            "2":[
                {value:4,desc:"Motorcycle"},
...etc
</script>

有人可以帮帮我吗?

【问题讨论】:

  • 这是一个 SQL 表吗?选择请求是用 PHP 执行的吗?
  • 是的,它是一个 SQL 表,我想做的是用 PHP 用不同的表循环它,输出如上所述。

标签: javascript php jquery mysql foreach


【解决方案1】:

目前尚不清楚您想要实现什么目标以及使用什么语言。 您要求的是 PHP 解决方案,但所有的代码都在 JS 中。

这是我理解你正在尝试做的 JS 解决方案

const initialData = [
{
  id: 1,
  category: 1,
  subCategory: 'Apple'
},{
  id: 2,
  category: 1,
  subCategory: 'Orange'
},{
  id: 3,
  category: 2,
  subCategory: 'Car'
},{
  id: 4,
  category: 2,
  subCategory: 'Motorcycle'
},

]

const groupedByCategory = initialData.reduce((res, {id, category, subCategory}) => {
  const existing = res[category] || []
  return {
    ...res,
    [category] : [...existing, {value: id, desc: subCategory}]
  }
}, {});
console.log(groupedByCategory)

你可以在 PHP 中使用 array_reduce 做同样的事情

$data = [...]; // array with the same payload of the js 

$result = array_reduce($data, function($res, $item){
  $category = $item['category'];
  $existing = $res[$category] ?? [];
  $existing[] = ['value' => $item['id'], 'desc' => $item['subCategory']];
  $res[$category] = $existing;
  return $res; 

}, []);


【讨论】:

  • 谢谢,控制台的输出就是我要找的。但是如何在屏幕上显示呢?
【解决方案2】:

由于您似乎使用 PHP 从 SQL DB 获取数据,因此您的请求可以完成这项工作,而无需使用 PHP 或 JS 循环任何内容。

你能试试这样的吗?

$select = $conn->prepare(
    "SELECT
    DISTINCT category,
    id AS subkategoris_value,
    subcategory AS subkategoris_desc
    FROM sometable"
);
$select->execute([]);
$result = $select->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);

在此处,将 sometable 替换为您的表名,将 $conn 替换为您与 MySQL 数据库的连接。

您的输出将直接符合预期。

【讨论】:

    猜你喜欢
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多