[PHP] [JSON]错误生成数组
我有几天无法解决的问题。我需要创建数组编码成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但不成功。非常感谢您的帮助:)
一种方法可能是
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;
}
摆脱'$ i'和我们''''为新阵列发生 – RiggsFolly
这是很好的答案,但仍然没有工作,我认为使用这么多的循环不是很好,但感谢您的帮助 – Gatzu
有一种简单的方法来解决你的问题。一个想法是创建一个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);
害怕这不是问题。再次阅读问题 – RiggsFolly
我想在你的foreach循环,如果你使用if语句来测试,如果“城市”值是在阵列'in_array()',如果是则指示代码附加数据,如果不指示代码添加新的城市。 –
所以我想你只是在等人来为你做,对吧? – RiggsFolly
不,我不回答。我正在努力自己做。我花了很多时间来处理这个问题,但仍然没有解决它,所以我决定向人们寻求帮助(不是现成的解决方案) – Gatzu