Вставить содержимое массива в базу данных в php

avatar
vue densembles
8 апреля 2018 в 07:55
54
2
0

Я написал эту функцию, которая копирует некоторый контент с веб-страницы в мою базу данных. Моя проблема связана с моей переменной массива $lang, все работает так, как я хочу, когда я тестирую print_r($lang), но я не могу вставить значения в свою БД, потому что похоже, что массив пуст, когда я использовал его во втором foreach.

Ребята, как правильно вставить $lang в мою БД? Ниже приведен мой код. Ваша помощь будет высоко оценена. Спасибо!

<?php

$html = file_get_html($url);
$links = array();
$lang = array();
foreach ($html->find('div.blockshadow h1') as $i => $title) {
    $textValue = $title->plaintext;
    if (strpos($textValue, 'VF') !== false) {
        $lang[] = 'VF';
    } elseif (strpos($textValue, 'VOSTFR') !== false) {
        $lang[] = 'VOSTFR';
    } elseif (strpos($textValue, 'VO') !== false) {
        $lang[] = 'VO';
    }
}

foreach ($html->find('div.blockshadow iframe') as $key => $a) {
    $linkUrl = $a->src;
    $wpdb->insert(
            $table_name, array(
        'Idioma' => $lang,
        'Calidad' => ucwords("HDRIP"),
        'Enlace' => $linkUrl,
        'PID' => $return['ID'],
        'Tipo' => '3',
            )
    );
}
Источник

Ответы (2)

avatar
Manuel Mannhardt
8 апреля 2018 в 08:29
1

Если вы не планируете разбивать данные на несколько таблиц и хотите хранить их в одном столбце, вы можете использовать json_encode/serialize.

Какой из них вы выберете, в значительной степени зависит от вас, но придерживайтесь последовательности.

Когда вы считываете свои данные, просто используйте json_decode/unserialize, и вы получите свой первоначальный массив.

Что-то вроде:

   $data = json_encode([
       'Idioma' => $lang,
       'Calidad' => ucwords("HDRIP"),
       'Enlace' => $linkUrl,
       'PID' => $return['ID'],
       'Tipo' => '3',
   ]);

   $wpdb->insert($table_name, $data);

И для чтения вы сначала хотите выбрать данные из своей таблицы, как обычно, но перед их использованием вы должны json_decode/десериализовать столбец, который дает эти данные.

avatar
Kinshuk Lahiri
8 апреля 2018 в 08:01
0

Преобразуйте массив в строку, используя функцию implode, а также проверьте, является ли значение пустым или нет, что-то вроде этого.

$newLang = "";

if(!empty($lang))
{
   $newLang = implode(',',$lang);
}

И используйте переменную $newLang для базы данных, также внутри цикла foreach вы хотите вставить все значения, присутствующие в массиве, затем используйте описанный выше способ, если вам нужны определенные значения для каждого цикла, затем используйте $newLang[$key] .

Надеюсь, это поможет.

PS: Вы не можете вставить массив непосредственно в таблицу.

vue densembles
8 апреля 2018 в 09:10
0

Спасибо, я смог вставить данные в БД, но меня беспокоит то, что значение вставляется несколько раз, см. это изображение изображение 3 раза в этом случае, потому что у нас всего 3 $linkUrl , обычно один $newLang соответствует одному $linkUrl