首页 > 解决方案 > 如何在 PHP 中以矩阵形式映射 JSON 对象数组?

问题描述

这是我在 PHP中的JSON数据集格式:

$product_arr =
    {
        "Samiya J.": [
            {
                "SparePartID": "45",
                "Name": "Lights",
                "Rating": "5",
                "CustomerID": "5",
                "FirstName": "Samiya J."
            },
            {
                "SparePartID": "49",
                "Name": "Tool Kit",
                "Rating": "4",
                "CustomerID": "5",
                "FirstName": "Samiya J."
            },
            {
                "SparePartID": "52",
                "Name": "Side Mirrors",
                "Rating": "5",
                "CustomerID": "5",
                "FirstName": "Samiya J."
            },
            {
                "SparePartID": "52",
                "Name": "Side Mirrors",
                "Rating": "4",
                "CustomerID": "5",
                "FirstName": "Samiya J."
            },
            {
                "SparePartID": "45",
                "Name": "Lights",
                "Rating": "4",
                "CustomerID": "5",
                "FirstName": "Samiya J."
            }
        ],
        "Ammarah Niazi": [
            {
                "SparePartID": "45",
                "Name": "Lights",
                "Rating": "4",
                "CustomerID": "13",
                "FirstName": "Ammarah Niazi"
            },
            {
                "SparePartID": "47",
                "Name": "Steering Wheel",
                "Rating": "4",
                "CustomerID": "13",
                "FirstName": "Ammarah Niazi"
            }
        ]
    }

这些数据是根据人名分组。现在我试图通过发送一个人名并计算他与上述矩阵数据中所有其他人的距离来映射这个数据矩阵。

我使用了以下方法,但它让我出错:

public  function getRecommendations($matrix, $person)
{
  foreach ( $matrix as $otherPerson => $value)
  {
      if($otherPerson!= $person)
      {
           $sim = similarity_distance($matrix, $person, $otherPerson);
          var_dump($sim);
          return $sim;
      }
  }

}


 

    public function similarity_distance($matrix, $person1, $person2)
  {
      $similar = array();
      $sum = 0;

      foreach( $matrix[$person1] as $key => $value)
      {
          if (array_key_exists($key, $matrix[$person2]))
          {
              $similar[$key] = 1;
          }
      }

      if($similar == 0)
      {
          return 0;
      }

      foreach( $matrix[$person1] as $key => $value)
      {
          if (array_key_exists($key, $matrix[$person2]))
          {
     $sum = $sum + pow($value - $matrix[$person2][$key],2);
       }
      }
      return 1/(1 + sqrt($sum));
   }

并将上面的函数称为

getRecommendations($products_arr, 'Ammarah Niazi');

我得到的错误是:未捕获的错误:调用未定义的函数similarity_distance()

谁能告诉我我是否为上述功能发送了正确的格式数据,或者我做错了什么。我真的很困惑。

标签: phparraysjsonmatrix

解决方案


推荐阅读