WordPress как на ладони

Database — изменение типа массива (wp_usermeta)

в базе для каждого пользователя есть таблица wpfp_favorites в ней лежат ID's избранных постов
массив сейчас такой

// # => 'post_id' 
array (
  0 => '63798',
  1 => '56478',
  2 => '48211',
  3 => '77925',
  *** => ********
  217 => '128220',
  218 => '128776',
  219 => '125136',
)

как из него сделать такой ? куда копать ?

// 'post_id'  => '' 
array (
  '63798' => '',
  '56478' => '',
  '48211' => '',
  '77925' => '',
  ******* => ***
  '128220' => '',
  '128776; => '',

таких таблиц ровно столько , сколько пользователей

0
kolshix
5.1 год назад 779
  • 1
    $arr = array('63798', '56478', '48211');
    $arr2 = array_fill_keys($keys, '');
    
    /*
    Array
    (
    	[63798] => ''
    	[56478] => ''
    	[48211] => ''
    )
    */
    kolshix 5.1 год назад

    спасибо!
    буду дальше искать продолжение запроса в БД
    валяется у меня код подмены дат , думаю на его основе можно запилить скрипт

    kaliyan 5.1 год назад

    Вопрос был - как из одного массива сделать другой. Причем тут БД?

    kolshix 5.1 год назад

    может я не корректно написал, не имею соответствующей терминологии в обиходе

    Database — изменение типа массива...

    таких таблиц ровно столько , сколько пользователей

    kaliyan 5.1 год назад

    Вы говорите про БД, а показываете php-шный массив. Я немного не понимаю, что вам нужно.

    Вы говорите "таких таблиц ровно столько, сколько пользователей", т.е. у вас таблицы в БД
    wpfp_favorites_1
    wpfp_favorites_2
    wpfp_favorites_3
    цифра в названии таблицы - это ID пользователя. Я так понял? Какие поля в этих таблицах? Покажите структуру этих таблиц, как хранятся в них php-шные массивы?

    kolshix 5.1 год назад

    вот предыстория вопроса

    плагин избранных записей хранит ID постов которые понравились в таблице wp_usermeta в wpfp_favorites (соответственно DB - присваивается общий id и id владельца базы - все как и у других таблиц)

    id в каждой таблице wpfp_favorites хранится в виде строки
    array(1,2,3,4,5,6,7,8)

    я собираюсь сделать из массива другой вид, с ключем и значением, но так как значения брать пока не откуда, то оставить эти значения пустыми
    array("1"=>"","5"=>"","34"=>"")

    но руками все делать не вариант, нужно будет подключать скрипт или делать запрос в БД для внесение изменений массово (более 3000)

    kaliyan 5.1 год назад

    Да, с терминами у вас что-то есть.
    БД - это база данных
    wp_usermeta - это таблица из БД
    wpfp_favorites - это название мета-поля

    Я так и не понял как хранятся массивы в таблице.

    Но, создаете файл в корне wordpress, туда вставляете:

    <?php
    
    	define('SHORTINIT', true);
    
    	require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');
    
    	global $wpdb;
    	$result = $wpdb->get_results("SELECT umeta_id, meta_value FROM $wpdb->usermeta WHERE meta_key = 'wpfp_favorites'", ARRAY_A);
    
    	if ($result) {
    		foreach($result as $row){
    			// тут все зависит от того как хранится массив в базе
    			// в этом случае, предположим, что массив сериализован
    			$value = unserialize($row['meta_value']);
    
    			/*
    			Сейчас в $value лежит массив
    			array(
    				0 => '63798',
    				1 => '56478'
    			)
    			*/
    
    			$new_value = array_fill_keys($value, '');
    
    			/*
    			В $new_value лежит массив
    			Array
    				(
    					[63798] => ''
    					[56478] => ''
    				)
    			*/
    
    			$wpdb->update(
    				$wpdb->usermeta,
    				array('meta_value' => serialize($new_value)), // восстанавливаем прежний вид
    				array('umeta_id' => $row['umeta_id']),
    				array('%s'),
    				array('%d')
    			);
    		}
    	}
    ?>

    Код я не проверял, будут ошибки - пишите.

    kolshix 5.1 год назад

    Спасибо за код и Время - Буду тестировать.
    протестирую на нескольких мета-полях, на тестовой странице .

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация