当信息不恒定时从WP数据库获取数据

问题描述 投票:0回答:1

这是我的阵列:

    Array
    (
        [0] => Array
            (
                [id] => 1387
                [form_id] => 2
                [date_created] => 2018-05-17 21:34:37
         ---->  [67] => a:1:{i:0;a:7:{s:17:"wp_attachement_id";i:5828;s:9:"mime_type";s:9:"video/mp4";s:9:"file_path";s:89:"/home/xxx/public_html/wp-content/uploads/2018/05/703c94b2b97a6479113d9e3020952891.mp4";s:5:"title";s:3:"xxx";s:11:"description";s:3:"xxx";s:8:"video_id";s:6:"QRSTUV";s:9:"video_url";s:43:"https://www.youtube.com/watch?v=QRSTUV";}}
                [36] => New Harpshire
                [34] => Borristown
            )
   )

以下将打印视频ID:

      $undid = unserialize($entry['0']['67']);
      echo $undid['0']['video_id'];

问题是数字'67'不能保持不变。如果我不知道'67'会是什么,我该如何检索那个video_id?

php mysql wordpress gravity-forms-plugin
1个回答
0
投票

我为你掀起了一个快速的Demo

理想情况下,您会找到一种方法将键设置为语义名称而不是'67'。但如果你不能,而且总是不同,那么最好的办法就是检查预期值。

由于您期望一个序列化数组,我们可以通过unserialize()函数运行它们来检查序列化值。注意:这将触发E_NOTICE级别错误,因此您可能希望抑制那些使用@unserialize()@抑制错误)。虽然抑制错误通常是一个坏主意,但这些是我们期望触发的错误,因此应该安全地忽略它们。

因此,当我们通过unserialize()传递信息时,我们可以检查它是否将$undid设置为真值。一旦它发生,我们需要确保我们有正确的序列化信息,所以我们可以看看是否设置了$undid[0]['video_id'],如果是,则回显该值(或者你想用它做什么),然后break foreach循环,因为一旦我们的条件满足它就不再需要运行了。

这不是最美丽的解决方案,但除非你能弄清楚如何将这个键命名为file_upload_array这样的语义,你最好的选择是循环遍历这些值,直到找到你需要的那个。只要你没有不可想象的数量的字段,这应该相当快。

$entry = [
    [
        'id' => 1387,
        'form_id' => 2,
        'date_created' => '2018-05-17 21:34:37',
        '67' => 'a:1:{i:0;a:7:{s:17:"wp_attachement_id";i:5828;s:9:"mime_type";s:9:"video/mp4";s:9:"file_path";s:89:"/home/xxxxxxx/public_html/wp-content/uploads/2018/05/703c94b2b97a6479113d9e3020952891.mp4";s:5:"title";s:3:"xxx";s:11:"description";s:3:"xxx";s:8:"video_id";s:6:"QRSTUV";s:9:"video_url";s:43:"https://www.youtube.com/watch?v=QRSTUV22222";}}',
        '36' => 'New Harpshire',
        '34' => 'Borristown',
    ]
];

foreach( $entry[0] as $key => $val ){
    if( $undid = @unserialize( $val ) ){ // unserialize returns E_NOTICE warnings on non-serialized items. @ suppresses that.
        if( isset( $undid[0]['video_id'] ) ){ // Make sure this is the correct serialized field
            echo $undid[0]['video_id'];
            break;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.