我想使用一个mysql存储过程返回一个JSON字符串,可以变成一个关联数组使用PHP的json_decode函数。我有一个有效的JSON字符串从s.p返回,但它不是正确的形式或json_decode($skusJson, true);
不喜欢它出于某种原因。用于获取SP的结果,并做json_decode的PHP代码:正确的格式从MySQL存储过程和php的关联数组json_decode
$partsQuery = $this->Orders->callSP('part_skus_dropdown1');
$skusJson = $partsQuery->fetchAll('assoc');
$partsQuery->closeCursor();
$skus = json_decode($skusJson[0]['json'], true);
MySQL的SP是:
CREATE DEFINER=`root`@`localhost` PROCEDURE `part_skus_dropdown1`()
BEGIN
SELECT
CONCAT('[',
GROUP_CONCAT(
CONCAT('{"id":',id),
CONCAT(',"sku":"',sku,'"}')
),
']')
AS json FROM parts where id < 25;
END
产生的JSON字符串是:
[
{
"id" : 1,
"sku" : "1"
},
{
"id" : 3,
"sku" : "3"
},
{
"id" : 6,
"sku" : "6"
},
{
"id" : 7,
"sku" : "7"
},
{
"id" : 9,
"sku" : "9"
}
]
(SKU的意志并不总是与id相匹配,而是以字符串而不是ints存储)。所述json_decoding的结果是:
[
(int) 0 => [
'id' => (int) 1,
'sku' => '1'
],
(int) 1 => [
'id' => (int) 3,
'sku' => '3'
],
(int) 2 => [
'id' => (int) 6,
'sku' => '6'
],
(int) 3 => [
'id' => (int) 7,
'sku' => '7'
]
]
有反正我可以得到所得阵列是在[ID => SKU]的形式:(所示ALT SKU格式)
[
(int) 1 => '1',
(int) 3 => '3',
(int) 58 => '3-BOX100'
]
我提前:)
为什么你想让你的最终数组看起来像那样?只是想知道 – thedarklord47
@ thedarklord47它将在选择下拉菜单中使用,以允许用户根据零件SKU选择零件。我最初只是用sp来拉动所有的零件信息,并通过这些结果循环javascript来更新选择选项,但是这对于20k零件来说太慢了...... – BSounder
有很可能有更好的方式去做它(我很想听),但我想避免循环,最好使用存储过程来减少Web服务器上的负载。 – BSounder