Algolia:如何使用以下数据创建细化列表

时间:2018-03-18 10:13:17

标签: php laravel algolia faceted-search laravel-scout

我尝试使用以下产品数据创建优化列表:

  1. 表1:产品
  2. 表2:产品详细信息。
  3. 使用Table Product,可以完美地检索所有需要的数据,从而创建一个非常类似于algolia电子商务最佳购买示例的json文件。

    {
    “id”: "3953367"
    “name”: “360fly - Panoramic 360° HD Video Camera - Black”,
    “popularity”: 9999,
    “rating”: 5,
    “objectID”: “9131042”
    },
    

    另一方面,表2 - >产品详细信息具有以下结构:

    id - productId - name - value.
    1 - 3953367 - Operating System - Android 4.4 KitKat
    2 - 3953367 - Voice Activated - Yes
    3 - 3953367 - Processor Speed - 1.2 gigahertz
    

    如您所见,1个单品可以显示3个以上的方面选项。

    1. 操作系统
    2. 语音激活
    3. 处理器速度
    4. 但我不知道如何构建数据以创建这样的细化列表:

      enter image description here

      作为一个例子,我如何创建json以允许人们使用操作系统进行优化。

      我尝试过类似的事情:

      $record[$this->productdetails->map(function($data) {return [$data[‘name’]];})->toArray()]
      = 
      $this->productdetails->map(function($data) {return [$data[‘value’]]; })->toArray();
      

      但在此示例中我收到错误:

      非法偏移类型

      任何赞赏的例子。我正在使用Laravel Scout和Algolia。

      根据用户@ daniel-h方法我更新了我的代码。

      public function toSearchableArray()
      {
          $record['name'] = $this->productName;
          $record['description'] = $this->productSpecification;
          $record['brand'] = $this->productBrand;
          $record['color'] = $this->color;
          $new_array = [];
      
          foreach ($this->productdetails as $record) {
              $new_array[$record['name']] = $record['value'];
          }
          return $record;
      }
      

      目前我正在接收array_merge():参数#1不是数组

      更新:

      解决方案是:

      // Add the product details to the array
          foreach ($this->productDetails as $detailsRecord) {
            $record[$detailsRecord->name] = $detailsRecord->value;
          }
      

1 个答案:

答案 0 :(得分:2)

我不知道你想要什么,但错误是因为你不能给数组作为$ record的索引。看起来应该更像:$ record [1]或$ record ['key']。

你在寻找类似的东西:

import sys

aList = [[None, 8.0, 1.0], [2.0, 3.0], [9.0], [5.0, None, 4.0]]
mininum = sys.maxsize

for j, ele in enumerate(aList):
    cur_min = min(float(i) for i in ele if i is not None)
    if cur_min < mininum:
        minimum = cur_min
        pos_index = ele.index(minimum)
        list_index = j

print(aList[list_index][pos_index])