#php #arrays #wordpress #object #loops
#php #массивы #wordpress #объект #циклы
Вопрос:
У меня есть что-то похожее на следующую структуру:
Array
(
[wp_postmeta] => Array
(
[0] => stdClass Object
(
[meta_id] => 1
[post_id] => 2
[meta_key] => _wp_page_template
[meta_value] => default
)
)
[wp_comments] => Array
(
[0] => stdClass Object
(
[comment_ID] => 1
[comment_post_ID] => 1
[comment_author] => Mr WordPress
[comment_author_email] =>
[comment_author_url] => http://wordpress.org/
[comment_author_IP] =>
[comment_date] => 2011-10-20 03:06:23
[comment_date_gmt] => 2011-10-20 03:06:23
[comment_content] => Hi, this is a comment.
[comment_karma] => 0
[comment_approved] => 1
[comment_agent] =>
[comment_type] =>
[comment_parent] => 0
[user_id] => 0
)
)
)
То, что я пытаюсь здесь сделать, это перебрать эти результаты, чтобы я мог использовать их для формирования запроса.
Предположим, что все данные в таблице wp_postmeta удалены из базы данных, и этот массив содержит данные этой таблицы до ее удаления. Я хочу взять эти сохраненные данные в массиве и сбросить таблицу с этими старыми значениями.
Т.е. перебираем массив и вставляем это как sql: ВСТАВЛЯЕМ В ЗНАЧЕНИЯ wp_postmeta (meta_id, post_id, meta_key, meta_value) (1, 2, ‘_wp_page_template’, ‘default’)
Комментарии:
1. И в чем проблема?
2. Проблема в том, что я не могу понять, как выполнить итерацию по этим результатам для формирования запроса.
3. Посмотрите в WP API, как вставить объект в качестве комментария. Затем вам нужно только выполнить поиск по массиву и выполнить вставку для каждого значения.
4. Объект в качестве комментария? Единственная функция, которую я могу найти, это $wpdb-> insert( $wpdb-> имя_таблицы, массив( ‘field_one’ => $newvalueone, ‘field_two’ => $newvaluetwo ) );
Ответ №1:
foreach ($outerArray as $tableName => $tableData) { // Loop outer array
foreach ($tableData as $row) { // Loop table rows
$cols = $vals = array();
foreach ($row as $col => $val) { // Loop this row
$cols[] = $col;
$vals[] = $val; // You may need to escape this before using it in a query...
}
// Build the query
$query = "INSERT INTO $tableName (".implode(', ',$cols).") VALUES ('".implode("', '",$vals)."')";
// Do the query here
}
}
Вы можете перебирать свойства объекта так же, как вы можете с массивом, и в a stdClass
все общедоступно, поэтому вышеупомянутое должно работать без проблем.
Комментарии:
1. Дэйв, большое спасибо — я скоро попробую. Хотя один вопрос — скажем, мы возьмем это в качестве примера для field => value: [comment_content] => Пришло время вечеринки «»sss. Это, без сомнения, нарушит ваш запрос — простой способ исправить это?
2. О, только что увидел ваш комментарий рядом с $val. Правильно. : p