Как отобразить массив объектов JSON в виде матрицы в PHP? - PullRequest
0 голосов
/ 05 июля 2019

Вот мой формат набора данных в JSON в PHP:

$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"
            }
        ]
    }

Эти данные сгруппированы по именам person . Теперь я пытаюсь отобразить эти данные матрица , отправив имя человека и рассчитав его расстояние со всеми другими лицами в приведенных выше матричных данных.

Я использовал следующий подход, но он вызывает ошибку:

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');

ОШИБКА, которую я получаю, это: Uncaught Error: вызов неопределенной функции Similarity_distance ()

Может кто-нибудь сказать мне, если я отправляю данные в правильном формате для вышеуказанных функций или где я делаю неправильно. Я действительно смущен.

...