【问题标题】:Is there a way to access an array element via multiple keys?有没有办法通过多个键访问数组元素?
【发布时间】:2021-05-05 06:44:40
【问题描述】:

我正在尝试将一些数据存储在 php 中的关联数组中,以便稍后在 javascript 中访问。我想以一种可以通过多种方式访问​​数据的方式处理数据,比如按名称和类型?

//e.g. in cpp i would do
struct SortedFruits{
  std::unordered_map<std::string, Fruits> byName;
  std::unordered_map<std::string, std::unordered_map<std::string, Fruits&>> byType;
}
SortedFruit fruit();
//then add them like
fruit.byName["apple"] = new Apple();
fruit.byType["red"]["apple"] = &fruit.byName["apple"];

我基本上只是想要fruits.byType['red']['apple'] === fruits.byName['apple']。理想情况下,我希望这在 php 中完成,这样我就可以将它存储在某个地方而不是重新计算,但如果引用/指针无法在 json 中生存,我也很乐意在 javascript 中进行排序。

请问最好的方法是什么?

【问题讨论】:

  • 最好只返回具有相关属性的对象列表,然后在 JS 中搜索它们。
  • @ADyson 请问为什么?另外我应该如何在 JS 中搜索它们?
  • 因为否则您必须将相同的数据放在不同索引下的 JSON 中的多个位置。这很乱。很确定您已经可以在 JavaScript 中找到可以搜索对象数组的搜索/过滤/索引代码 - 在线搜索。

标签: javascript php json


【解决方案1】:

我认为在 php 中格式化数据以便稍后由 js 从 json 解析并不是最好的方法。 基本上你的对象Fruit 有两个属性namecolor。我只是用Fruit 的数组编码一个json,并在js 中按照我想要使用这些对象的方式映射它。 我不认为映射对象是服务器的职责,它的职责是为客户端提供数据。

编辑(回应评论)

在 JS 中,我什至不会将它们存储在多个地图中。

const fruits = [
    {color: 'red', name: 'apple'},
    {color: 'red', name: 'strawberry'},
    {color: 'yellow', name: 'banana'}
];

const redOnes = fruits.filter(fruit => fruit.color === 'red');
// will return [{color: 'red', name: 'apple'}, {color: 'red', name: 'strawberry'}]

const apple = fruits.find(fruit => fruit.name === 'apple');
// will return {color: 'red', name: 'apple'}

【讨论】:

  • 我只是认为这样做服务器端可以使页面更快,因为处理后的列表可以存储在某个文件或缓存中?无论如何,有没有一种方法可以在不涉及存储重复项的 js 中对它们进行排序?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多