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

Php 信息不恒定时从WP数据库获取数据,php,mysql,wordpress,gravity-forms-plugin,Php,Mysql,Wordpress,Gravity Forms Plugin,这是我的阵列: 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_

这是我的阵列:

    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”将是什么,我如何检索该视频id?

我为您快速制作了一个短片

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

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

因此,当我们通过
unserialize()
传递内容时,我们可以检查它是否将
$undid
设置为真实值。一旦设置了,我们需要确保有正确的序列化信息,这样我们就可以查看是否设置了
$undid[0]['video_id']
,如果设置了,则回显该值(或您想对其执行的任何操作),然后
中断
foreach
循环,因为一旦满足条件,它就不再需要运行

这并不是最漂亮的解决方案,但除非你能想出如何给键命名,比如
文件\u upload\u 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;
        }
    }
}

如何获得原始阵列?您是否使用wordpress函数获取它?$search\u criteria=array('status'=>'active','field\u filters'=>array('mode'=>'any',array('key'=>'post\u id','value'=>$thePostID))$entry=GFAPI::get_entries($form_id,$search_-criteria);视频URL是如何存储在那里的?你有没有用特殊的方式配置重力表?这是一些预配置的视频类型输入字段吗?网站前端有一个表单,它使用gravity forms&gravity forms advanced file uploader插件。用户在填写表单的同时,将视频上传到youtube,然后提交,创建一个新帖子。没有特殊配置,谢谢!这正是我所需要的。也非常感谢你的解释!当我能从答案中学习并理解如何/为什么时,我真的很感激。