【问题标题】:How to display a unserialised data in php when there are multiple values in an array当数组中有多个值时如何在php中显示未序列化的数据
【发布时间】:2018-12-05 08:15:38
【问题描述】:

我有一个页面显示来自具有未序列化数据的数据库的数据。未序列化的数据如下所示:

array (
  'text-name' => 'test',
  'email' => 'test@gmail.com',
  'text-company' => 'test',
  'tel-number' => '978456132',
  'products' => 
  array (
    0 => 'Domains',
    1 => 'Weebly',
  ),
  'menu-country' => 'Austria',
  'number' => '1001 - 10,000',
  'text-current-registrar' => '5',
  'notes' => 'test',
  'text-current-url' => 'https://www.foo.com/boo-foo/',
  'text-previous-url' => 'https://www.foo.com/boo-foo/',
  'text-utm_source' => '',
  'text-utm_medium' => '',
  'text-utm_campaign' => '',
  'gdpr-b' => 
  array (
    0 => 'I',
  ),
  'gdpr-c' => 
  array (
    0 => 'I',
  ),
  'gdpr-d' => NULL,
  'gdpr-e' => NULL,
)

数据库中的数据格式如下:'a:18:{s:9:"text-name";s:4:"test";s:5:"email";s:14:"test@gmail.com";s:12:"text-company";s:4:"test";s:10:"tel-number";s:9:"978456132";s:8:"products";a:2:{i:0;s:7:"Domains";i:1;s:6:"Weebly";}s:12:"menu-country";s:7:"Austria";s:6:"number";s:13:"1001 - 10,000";s:22:"text-current-registrar";s:1:"5";s:5:"notes";s:4:"test";s:16:"text-current-url";s:59:"https://www.bla.com/foo-bar/";s:17:"text-previous-url";s:59:"https://www.bla.com/foo-bar/";s:15:"text-utm_source";s:0:"";s:15:"text-utm_medium";s:0:"";s:17:"text-utm_campaign";s:0:"";s:6:"gdpr-b";a:1:{i:0;s:1:"I";}s:6:"gdpr-c";a:1:{i:0;s:1:"I";}s:6:"gdpr-d";N;s:6:"gdpr-e";N;}'

要显示的php代码如下:

<?php
        $no     = 1;        
        while ($row = mysqli_fetch_array($query))
        {           
            echo '<tr>';
            echo '<td>'.$no.'</td>';
            echo '<td>'.$row['form'].'</td>';           
             $formdata = unserialize($row['data']);
            foreach ($formdata as $key => $fdata)
            {
                if( sizeof($fdata) !=1  ) 
                {
                    if (is_array($fdata)) {
                        $fsofdata = array_map('unserialize', $fdata);
                        foreach ($fsofdata as $prod => $prodvalue)
                        {
                            if ( ($prod === 'gdpr-b') || ($prod === 'gdpr-c') || ($prod === 'gdpr-d') || ($prod === 'gdpr-d')  ) {
                                foreach ($prodvalue as $pprod => $pprodvalue)
                                {
                                    echo '<td>'.$pprod.''.($pprodvalue).'</td>';
                                }
                            }
                            else {


                            echo '<td>'.($prodvalue).'</td>';
                            }
                        }
                    }
                    else {
                        echo '<td>'.($fdata).'<td/>';
                    }
                }
                else {
                    echo '<td>'.($fdata).'<td/>';                                                   
                }
            }
            echo '<td>'.$row['date']. '</td>';                  
            echo '</tr>';           
            $no++;
        }
?>

这里的问题是产品数组中存在的数据和 gdpr-b、gdpr-c 变量显示为数组,我在数据上尝试了 array_map,但这也无助于我如何在表格中的数组。

【问题讨论】:

  • 能否打印产品数组并发送到这里
  • 当我在屏幕上打印数组时它的'Array'
  • 那么你最好在那里使用foreach
  • 表关系有问题或者你的逻辑先发现问题
  • 我完全从不同的插件存储这些数据。所以我无法控制数据库值

标签: php html arrays multidimensional-array html-table


【解决方案1】:

serialize()unserialize() 是双重的 - 即如果您有一个数组并对其进行序列化,那么反序列化将使您返回完全相同的数组(包括所有嵌套的子数组)。 但是,如果您的原始数组包含的元素是另一个数组的序列化(因此这些元素当前是字符串) - 那么您将不得不遍历您的 1 级数组并取消序列化每个单独的项目。 最好的方法是仅将顶层数组作为一个整体进行序列化,而不是对其每一项进行序列化。 如果您的数组不包含对象 - 最好使用 json_encodejson_decode

【讨论】:

  • 原始数组被序列化了我不能使用json_decode,因为它里面的数据不是正确的json。
  • 如果serialize($original_array) 的结果存储在数据库中 - 那么您只需执行unserialize($string_from_DB) 即可获取数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 2020-08-20
相关资源
最近更新 更多