Получение данных из базы данных WP, когда информация не постоянна - PullRequest
0 голосов
/ 18 мая 2018

Это мой массив:

    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
            )
   )

Ниже будет напечатан идентификатор видео:

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

Проблема в том, что число «67» не остается постоянным.Как мне получить этот video_id, если я понятия не имею, каким будет «67»?

1 Ответ

0 голосов
/ 18 мая 2018

Я быстро набрал для вас Демо .

В идеале вы найдете способ установить ключ к семантическому имени вместо '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;
        }
    }
}
...