2015-10-22 3 views
4

Я пытаюсь использовать Google Cloud Messaging (GCM) для перемещения двумерного массива на устройство. Однако я обнаружил, что GCM может отправлять только один массив за один раз.GCM PHP - Передача двумерного массива

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

Ниже приведены два различных сценария

Одномерный массив (который успешно нажать на устройство)

Array 
(
    [pump_name] => LEVO 92 
    [pump_price] => 2.5 
) 
1 
{"multicast_id":8959934119853137719,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1445482576757470%9dde29c5f9fd7ecd"}]} 
Array 
(
    [pump_name] => LEVO 95 
    [pump_price] => 3 
) 
1 
{"multicast_id":6988128903201803494,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1445482576797158%9dde29c5f9fd7ecd"}]} 

двухмерного массива (который не в состоянии нажать на устройство)

Array 
(
    [0] => Array 
     (
      [pump_name] => LEVO 92 
      [pump_price] => 2.5 
     ) 

    [1] => Array 
     (
      [pump_name] => LEVO 95 
      [pump_price] => 3 
     ) 

) 
1 
Field "data" must be a JSON array: [{"pump_name":"LEVO 92","pump_price":"2.5"},{"pump_name":"LEVO 95","pump_price":"3"}] 

коды (я разделить его на две части)

насос Цена Функция

function pump_price() { 

    global $wpdb; 

    $result = array(); 
    $temp_result = array(); 
    $counter = 1; 

    $rows = $wpdb->get_results($wpdb->prepare("SELECT DISTINCT meta_value FROM postmeta WHERE meta_key LIKE %s", 'pump_price_list_%', 'pump_%')); 

    if($rows) : 
     foreach($rows AS $row) : 
      if($counter % 2 == 0) : 

       // Store Value Into Temporary Array 
       $temp_result["pump_price"] = $row->meta_value; 

       array_push($result, $temp_result); 

       // Unset Temporary Array 
       unset($temp_result); 
       $temp_result = array(); 

      else : 

       $temp_result['pump_name'] = $row->meta_value; 

      endif; 
      $counter++; 
     endforeach; 
    endif; 

    sendGoogleCloudMessage($result); 

} 

GCM Функция

function sendGoogleCloudMessage($result) { 

    define('API_ACCESS_KEY', 'MY-API-KEY'); 

    $registrationIds = array('MY-DEVICE-ID'); 

    $headers = array (
     'Authorization: key=' . API_ACCESS_KEY, 
     'Content-Type: application/json' 
    ); 

    $fields = array (
     'registration_ids' => $registrationIds, 
     'data'    => $result 
    ); 


    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send'); 
    curl_setopt($ch,CURLOPT_POST, true); 
    curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($fields)); 
    $results = curl_exec($ch); 
    curl_close($ch); 

    echo $results; 
} 

ответ

0

Вы отправляете 2 JSONs и то проблема. Вы можете объединить их в один, как это:

{ 
    "array1": { 
       "pump_name":"LEVO 92", 
       "pump_price":"2.5" 
       }, 
    "array2": { 
       "pump_name":"LEVO 95", 
       "pump_price":"3" 
       } 
} 

Тогда вы должны пролил их на стороне клиента

+0

Спасибо, что ответили! Позвольте мне попробовать. Вернитесь к вам позже. – WeeHong

+0

Привет, спасибо, за ваше предложение. Мне удалось это сделать, добавив маленькую вещь внутри моего кода. – WeeHong

+0

@ Kane приветствуются – Ali

0

Привет для тех людей, которые ищут решение этой проблемы.

Мне удалось найти решение после ссылки на предложение @Ali.

Но есть некоторые коды, которые необходимо изменить, прежде чем вы сможете передавать двумерные данные или больше. Пожалуйста, прочитайте приведенное ниже решение.

Решение

Преобразование массива в объект

if($rows) : 
    foreach($rows AS $row) : 
     if($counter % 2 == 0) : 

      // Store Value Into Temporary Array 
      $temp_result["pump_price"] = $row->meta_value; 

      array_push($result, (object)$temp_result); 

      // Unset Temporary Array 
      unset($temp_result); 
      $temp_result = array(); 

     else : 

      $temp_result['pump_name'] = $row->meta_value; 

     endif; 
     $counter++; 
    endforeach; 
endif; 

sendGoogleCloudMessage((object)$result); 

Пожалуйста, поправьте меня, если это не является идеальным решением.

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