2016-03-06 3 views
1

Я пытаюсь получить доступ к одному значению массива, я не могу понять, что это правильно. Это код:PHP Доступ к одному массиву из класса

$socialCounts = new socialNetworkShareCount(array(
    'url' => 'http://facebook.com/', 
    'facebook' => true, 
    'buffer' => true, 
    'pinterest' => true, 
    'linkedin' => true, 
    'google' => true 
)); 

print_r($socialCounts->getShareCounts()); 

возвращающий следующее:

{"facebookshares":52132062,"facebooklikes":0,"pinterestshares":243942,"linkedinshares":4708,"googleplusones":0,"buffershares":207477,"total":52588189} 

Как я могу получить доступ к vaule каждого отдельного товара? Например, если я хотел бы повторить стоимость акций facebook.

И это полный класс, если вам нужно:

class socialNetworkShareCount{ 

    public $shareUrl; 
    public $socialCounts = array(); 
    public $facebookShareCount = 0; 
    public $facebookLikeCount = 0; 
    public $twitterShareCount = 0; 
    public $bufferShareCount = 0; 
    public $pinterestShareCount = 0; 
    public $linkedInShareCount = 0; 
    public $googlePlusOnesCount = 0; 


    public function __construct($options){ 

     if(is_array($options)){ 
      if(array_key_exists('url', $options) && $options['url'] != ''){ 
       $this->shareUrl = $options['url']; 
      }else{ 
       die('URL must be set in constructor parameter array!'); 
      } 

      // Get Facebook Shares and Likes 
      if(array_key_exists('facebook', $options)){ 
       $this->getFacebookShares(); 
       $this->getFacebookLikes(); 
      } 

      // Get Twitter Shares 
      if(array_key_exists('twitter', $options)){ 
       $this->getTwitterShares(); 
      } 

      // Get Twitter Shares 
      if(array_key_exists('pinterest', $options)){ 
       $this->getPinterestShares(); 
      } 

      // Get Twitter Shares 
      if(array_key_exists('linkedin', $options)){ 
       $this->getLinkedInShares(); 
      } 

      // Get Twitter Shares 
      if(array_key_exists('google', $options)){ 
       $this->getGooglePlusOnes(); 
      } 

      // Get Buffer Shares 
      if(array_key_exists('buffer', $options)){ 
       $this->getBufferShares(); 
      } 

     }elseif(is_string($options) && $options != ''){ 
      $this->shareUrl = $options; 

      // Get all Social Network share counts if they are not set individually in the options 
      $this->getFacebookShares(); 
      $this->getFacebookLikes(); 
      $this->getTwitterShares(); 
      $this->getPinterestShares(); 
      $this->getLinkedInShares(); 
      $this->getGooglePlusOnes(); 
      $this->getBufferShares(); 

     }else{ 
      die('URL must be set in constructor parameter!'); 
     } 
    } 


    public function getShareCounts(){ 
     $totalShares = $this->getTotalShareCount($this->socialCounts); 
     $this->socialCounts['total'] = $totalShares; 




     return json_encode($this->socialCounts); 
    } 

    public function getTotalShareCount(array $shareCountsArray){ 
     return array_sum($shareCountsArray); 
    } 


    public function getFacebookShares(){ 
     $api = file_get_contents('http://graph.facebook.com/?id=' . $this->shareUrl); 
     $count = json_decode($api); 
     if(isset($count->shares) && $count->shares != '0'){ 
      $this->facebookShareCount = $count->shares; 
     } 
     $this->socialCounts['facebookshares'] = $this->facebookShareCount; 
     return $this->facebookShareCount; 
    } 

    public function getFacebookLikes(){ 
     $api = file_get_contents('http://graph.facebook.com/?id=' . $this->shareUrl); 
     $count = json_decode($api); 
     if(isset($count->likes) && $count->likes != '0'){ 
      $this->facebookLikeCount = $count->likes; 
     } 
     $this->socialCounts['facebooklikes'] = $this->facebookLikeCount; 
     return $this->facebookLikeCount; 
    } 

    public function getTwitterShares(){ 
     $api = file_get_contents('https://api.twitter.com/1.1/urls/count.json?url=' . $this->shareUrl); 
     $count = json_decode($api); 
     if(isset($count->count) && $count->count != '0'){ 
      $this->twitterShareCount = $count->count; 
     } 
     $this->socialCounts['twittershares'] = $this->twitterShareCount; 
     return $this->twitterShareCount; 
    } 


    public function getBufferShares(){ 
     $api = file_get_contents('https://api.bufferapp.com/1/links/shares.json?url=' . $this->shareUrl); 
     $count = json_decode($api); 
     if(isset($count->shares) && $count->shares != '0'){ 
      $this->bufferShareCount = $count->shares; 
     } 
     $this->socialCounts['buffershares'] = $this->bufferShareCount; 
     return $this->bufferShareCount; 
    } 


    public function getPinterestShares(){ 
     $api = file_get_contents('http://api.pinterest.com/v1/urls/count.json?callback%20&url=' . $this->shareUrl); 
     $body = preg_replace('/^receiveCount\((.*)\)$/', '\\1', $api); 
     $count = json_decode($body); 
     if(isset($count->count) && $count->count != '0'){ 
      $this->pinterestShareCount = $count->count; 
     } 
     $this->socialCounts['pinterestshares'] = $this->pinterestShareCount; 
     return $this->pinterestShareCount; 
    } 


    public function getLinkedInShares(){ 
     $api = file_get_contents('https://www.linkedin.com/countserv/count/share?url=' . $this->shareUrl . '&format=json'); 
     $count = json_decode($api); 
     if(isset($count->count) && $count->count != '0'){ 
      $this->linkedInShareCount = $count->count; 
     } 
     $this->socialCounts['linkedinshares'] = $this->linkedInShareCount; 
     return $this->linkedInShareCount; 
    } 

    public function getGooglePlusOnes(){ 

     if(function_exists('curl_version')){ 

      $curl = curl_init(); 
      curl_setopt($curl, CURLOPT_URL, "https://clients6.google.com/rpc"); 
      curl_setopt($curl, CURLOPT_POST, 1); 
      curl_setopt($curl, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . $this->shareUrl . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]'); 
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); 
      $curl_results = curl_exec($curl); 
      curl_close($curl); 
      $json = json_decode($curl_results, true); 
      $this->googlePlusOnesCount = intval($json[0]['result']['metadata']['globalCounts']['count']); 

     }else{ 

      $content = file_get_contents("https://plusone.google.com/u/0/_/+1/fastbutton?url=".urlencode($_GET['url'])."&count=true"); 
      $doc = new DOMdocument(); 
      libxml_use_internal_errors(true); 
      $doc->loadHTML($content); 
      $doc->saveHTML(); 
      $num = $doc->getElementById('aggregateCount')->textContent; 

      if($num){ 
       $this->googlePlusOnesCount = intval($num); 
      } 
     } 

     $this->socialCounts['googleplusones'] = $this->googlePlusOnesCount; 
     return $this->googlePlusOnesCount; 
    }} 
+0

Это данные JSON. Вы можете сделать это: '$ parsedArray = json_decode ($ socialCounts-> getShareCounts());' и это даст вам ассоциативный массив, где вы сможете получить доступ к таким данным, например: '$ parsedArray [' facebookshares'] '. В качестве альтернативы вы можете сделать это внутри функции класса, прежде чем возвращать данные JSON и вернуть ассоциативный массив. –

+0

@AleksandarBencun Проверьте класс. 'getShareCount()' намеренно обертывает результаты в 'json_encode()'. Нет смысла использовать его, поскольку отдельные результаты уже опубликованы. – Sean3z

+0

О, это правда. Ну, в этом случае он мог бы сначала проанализировать внутреннюю работу класса. Вот почему я добавил это как комментарий, а не ответ, это быстрое и грязное решение его вопроса. –

ответ

0

Согласно определению класса, вам не нужно вызывать getShareCounts(). Похоже, что этот метод, возможно, используется для предоставления некоторых функций API нижнего уровня. Я не думаю, что это предназначено для вашего случая использования.

Все приведенные ниже общедоступные переменные доступны и заполняются после запуска constructor.

public $facebookShareCount = 0; 
public $facebookLikeCount = 0; 
public $twitterShareCount = 0; 
public $bufferShareCount = 0; 
public $pinterestShareCount = 0; 
public $linkedInShareCount = 0; 
public $googlePlusOnesCount = 0; 

Таким образом, вы можете получить доступ к ним так:

$socialCounts = new socialNetworkShareCount(array(
    'url' => 'http://facebook.com/', 
    'facebook' => true, 
    'buffer' => true, 
    'pinterest' => true, 
    'linkedin' => true, 
    'google' => true 
)); 

print_r($socialCounts->facebookShareCount); // facebook shares 
print_r($socialCounts->facebookLikeCount); // facebook likes 
+0

Спасибо! Критерий сортировки. Сейчас имеет смысл –

+0

@ClaudioSantos Спасибо за обновление! Если это решение сработало для вас, пожалуйста, не стесняйтесь принять ответ. Это позволит другим знать, чтобы они не продолжали давать лишние ответы. :) [Вы можете принять заданный ответ, установив флажок] (http://meta.stackexchange.com/a/5235) – Sean3z

0

смешанная json_decode (строка $ JSon [, BOOL $ ассоциативный = False [, Int $ глубина = 512 [, INT $ опции = 0]]])

Source.

Поскольку ваш json является объектом, json_decode($yourparam) по умолчанию возвращает stdClass, в котором будут публичные пользователи. Так как вы хотели бы использовать связанный с ним array, вам нужно вызвать что-то вроде json_decode($yourparam, true), которое вернет связанный array, поскольку второй параметр является логическим значением, определяемым вашим намерением, хотите ли вы, чтобы связанный массив был результатом, по умолчанию значение false.

Смежные вопросы