如何将数据库表数据按两列分组并输出为json?

时间:2018-11-10 07:29:48

标签: php mysql arrays json

我正在尝试从PhpMyAdmin(Mysql)获取JSON(PHP)。它实际上需要看起来像:

    func getPicture() -> UIImage {



        let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!

        var videoWidth = CVPixelBufferGetWidth(imageBuffer)
        var videoHeight = CVPixelBufferGetHeight(imageBuffer)



        CVPixelBufferLockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))

        // Creating an image from a imageBuffer, a frame.
        let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer)
        let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer) 
        let colorSpace  = CGColorSpaceCreateDeviceRGB()  
        var bitmapInfo  = CGBitmapInfo.byteOrder32Little.rawValue
        bitmapInfo |= CGImageAlphaInfo.premultipliedFirst.rawValue 


        let context = CGContext(data: baseAddress, width: videoWidth, height: videoHeight, bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: bitmapInfo)!

        let frameImage =   context.makeImage()!  // This is a CGImage
        let image =  UIImage(cgImage: frameImage) 

        return image

    }

但是我实际上得到的是

[{ “converterno”: ”1”, “zoneno”: {“1a”, “codeid”:[“t1”,”t2”,”t3”]}, “zoneno”: {“1b”, “codeid”:[“t21”,”t0”,”t13”]}},{ “converterno”: ”2”, “zoneno”: {“2a”, “codeid”:[“t023”,”t9”,”t31”]}},………………………..  
  

我不知道为什么我一开始就得到零值

PHP代码为:

[{"converternumber":"1","zonenumber":{"0":"","codeid":["er"]}},{"converternumber":"1","zonenumber":{"0":"wr","codeid":["fxv"]}},{"converternumber":"2","zonenumber":{"0":"b2","codeid":["gffff"]}}]

任何人都可以告诉我“ While”循环中哪里出了问题。

浏览了 StackOverFlow 中与JSON相关的所有代码,但没有发现更接近或相似的内容。尝试了几乎所有内容并立即发布! 希望我能在这里得到任何帮助!

数据库中的表为: Table addcode

2 个答案:

答案 0 :(得分:0)

zonenumber的数组也覆盖了codeid元素...

"zonenumber":{"0":"","codeid":["er"]}

您需要在同一行上关闭zonenumber的数组,而要在codeid元素之后关闭它...

  'zonenumber' => array($row['zonenumber']),
  'codeid' => array($row['codeid'])

您还只会获取第一个数据,因为只有在尚未设置数据的情况下才添加数据...

  if(!isset($info[$row['converternumber']])){

由于要按2个元素进行分组,因此不能仅按converternumber索引数组,因为它不是唯一的。我将其更改为搜索数组并在converternumberzonenumber相同时添加它。.

$info = [];
while ($row = mysqli_fetch_array($result)){
    $exists = false;
    foreach ( $info as &$existing )  {
        if ( $existing['converternumber'] == $row['converternumber']
                && $existing['zonenumber'][0] == $row['zonenumber'] )  {
            $exists = true;
            $existing['codeid'][] = $row['codeid'];
            break;
        }
    }
    if(!$exists){
        $info[] = array(
            'converternumber'=> $row['converternumber'],
            'zonenumber' => [$row['zonenumber']],
            'codeid' => [$row['codeid']]
            );
    }
}

echo json_encode(array_values($info));

答案 1 :(得分:0)

经过深入讨论,您似乎希望拥有一个“祖父母/父母/子女”结构。这是非常容易形成的,并且完全关联的结构将使您的数据非常紧凑且易于迭代。

*,您应该使用python而不是膨胀的pandas,因为您不打算使用它生成的索引元素。

代码(Demo based on your database screenshot

mysqli_fetch_assoc()

3级数组如下所示:

mysqli_fetch_array()