2016-02-20 3 views
-1

У меня есть проблема, которую я не могу решить из нескольких дней. Мне нужно создать массив, который кодирует для Json в этом формате:[PHP] [JSON] Неверный генератор массива

[ 
    { 
"city": "Wroclaw", 
"data": [ 
    { 
    "id": "#", 
    "name": "Zlote tarasy", 
    "city": "Wroclaw", 
    "post_code": "50-545", 
    "street": "Ko\u015bciuszki", 
    "house_no": "2", 
    "flat_no": "4", 
    "opening_hours": "8:00 - 16:00", 
    "latitude": 52.2330649, 
    "longitude": 20.9207689, 
    "description": "Opis sklepu" 
    }, 
    { 
    "id": "#", 
    "name": "Arkadia", 
    "city": "Wroclaw", 
    "post_code": "50-545", 
    "street": "Ko\u015bciuszki", 
    "house_no": "2", 
    "flat_no": "4", 
    "opening_hours": "8:00 - 16:00", 
    "latitude": 52.2571437, 
    "longitude": 20.9822873, 
    "description": "Opis sklepu" 
    } 
    ] 
    }] 

Вот мой генерировать метод массива:

public function getCollectionAsArray() 
{ 
    $stores = $this->getStoreCollection(); 

    $jsonArray = array(); 

    foreach ($stores as $store) { 

     $jsonArray[] = array(
      'city' => $store->getCity(), 
      'data' => array(
       [ 
        'id'   => $store->getIdentifier(), 
        'name'  => $store->getName(), 
        'post_code' => $store->getPostCode(), 
        'street'  => $store->getStreet(), 
        'house_no' => $store->getHouseNo(), 
        'flat_no'  => $store->getFlatNo(), 
        'latitude' => $store->getLatitude(), 
        'longitude' => $store->getLongitude(), 
        'description' => $store->getDescription() 
       ], 
      ), 
     ); 
    } 

    return $jsonArray; 
} 

Это работает, но когда у меня есть 2 одинаковые Города, это создать новый город вместо оных данные массива «данные»:

array (size=4) 
0 => 
array (size=2) 
    'city' => string 'Wrocław' (length=8) 
    'data' => 
    array (size=1) 
     0 => 
     array (size=9) 
      ... 
1 => 
array (size=2) 
    'city' => string 'Wrocław' (length=8) 
    'data' => 
    array (size=1) 
     0 => 
     array (size=9) 

Я пытался с array_merge и array_push, но не увенчались успехом. Большое спасибо за вашу помощь :)

+1

Я думаю, что в цикле Еогеасп, если вы используете, если заявление, чтобы проверить, если «город» значение в массиве 'in_array()', и если он должен затем поручить код для добавьте данные, а если не проинструктируйте код о добавлении нового города. –

+2

Итак, я думаю, вы просто ждали, когда кто-то сделает это за вас, не так ли? – RiggsFolly

+0

Нет, я не собираюсь отвечать за ответ. Я пытаюсь сделать сам. Я трачу много времени на эту проблему и до сих пор не разрешил ее, поэтому я решил обратиться за помощью к людям (не готовое решение) – Gatzu

ответ

0

Один из подходов может быть

public function getCollectionAsArray() 
{ 
    $stores  = $this->getStoreCollection();  
    $jsonArray = array(); 
    $i = 0;  
    foreach ($stores as $store) 
    {  
     $jsonArray[$store->getCity()][] = array( 
        'id'   => $store->getIdentifier(), 
        'name'  => $store->getName(), 
        'post_code' => $store->getPostCode(), 
        'street'  => $store->getStreet(), 
        'house_no' => $store->getHouseNo(), 
        'flat_no'  => $store->getFlatNo(), 
        'latitude' => $store->getLatitude(), 
        'longitude' => $store->getLongitude(), 
        'description' => $store->getDescription() 
       ); 
    } 
    $final = array(); 
    foreach($jsonArray as $key => $json) 
    { 
     $getkey = myfunction($final,"city",$key); 
     if($getkey) 
     { 
      $final[$getkey]["data"][] = $json; 
     } 
     else 
     { 
      $final[] = array("city" => $key , "data" => array(0 => $json)); 
     } 
    } 
    return $final; 
} 

function myfunction($products, $field, $value) 
{ 
    foreach($products as $key => $product) 
    { 
     if ($product[$field] === $value) 
     return $key; 
    } 
    return false; 
} 
+1

Избавьтесь от '$ i' и просто us' [] 'для нового массива – RiggsFolly

+0

Это хороший ответ, но он все еще не работает, и я думаю, что использование множества циклов не очень хорошо, но спасибо за вашу помощь. – Gatzu

0

Существует простой способ, чтобы решить вашу проблему. Идея - это просто создать массив PHP и использовать json_encode($your_array_php). Как что:

$jsonArray = array(
     'city' => $store->getCity(), 
     'data' => array(
       'id'   => $store->getIdentifier(), 
       'name'  => $store->getName(), 
       'post_code' => $store->getPostCode(), 
       'street'  => $store->getStreet(), 
       'house_no' => $store->getHouseNo(), 
       'flat_no'  => $store->getFlatNo(), 
       'latitude' => $store->getLatitude(), 
       'longitude' => $store->getLongitude(), 
       'description' => $store->getDescription() 
     ), 
    ); 
    $jsonArray = json_encode($jsonArray); 
+0

Боюсь, что это не проблема. Снова прочитайте вопрос – RiggsFolly

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