Как обработать двумерный ассоциативный массив?

Добрый день. Пробую написать под свои нужны плагин для wordpress.

Подскажите пожалуйста, как обработать такой массив?
array(3) {
  ["id"]=>
  array(4) {
    [0]=>
    string(1) "6"
    [1]=>
    string(1) "7"
    [2]=>
    string(1) "8"
    [3]=>
    string(1) "9"
  }
  ["comment"]=>
  array(4) {
    [0]=>
    string(23) "Комментарий 1"
    [1]=>
    string(18) "Комментарий 2"
    [2]=>
    string(8) "Комментарий 3"
    [3]=>
    string(0) "Комментарий 4"
  }
  ["status"]=>
  array(4) {
    [0]=>
    string(7) "success"
    [1]=>
    string(3) "not"
    [2]=>
    string(3) "bad"
    [3]=>
    string(3) "not"
  }
}


Это POST массив.

Необходимо одним запросом обновить данные в бд.

Сейчас делаю так: комбинирую массивы, чтобы значение одного массива было ключом другого. То есть, если изменять два столбца в БД, то приходится делать два запроса и два цикла. Это не есть гуд.

БД обновляю так
foreach ($result_arr_comment as $key => $val) {
				$wpdb->update( $table_name,
					array( 'comment' => $val ),
					array( 'ID' => $key )
				);
			}
  • Вопрос задан
  • 132 просмотра
Решения вопроса 2
mashletov
@mashletov
Math.random()
Если список полей неизвестен заранее:
// если предполагать, что количество элементов в подмассивах одинаково, то:

        if (empty($_POST)) {
            return;
        }

        $names = array_keys($_POST);
        $count = count($_POST[$names[0]]);

        for ($i = 0; $i < $count; $i++) {
            $id = null;
            $data = [];

            foreach ($names as $name) {
                $value = isset($_POST[$name][$i]) ? $_POST[$name][$i] : null; // вообще, тут лучше выдавать ошибку, а не null

                if ($name === 'ID') {
                    $id = $value;
                } else {
                    $data[$name] = $value;
                }
            }

            if (!empty($id) && !empty($data)) {
                $wpdb->update('tableName', $data, ['ID' => $id]);
            }
        }
Ответ написан
Комментировать
@DrGosh_m
foreach ($result["id"] as $key => $id) {
        $wpdb->update( $table_name,
          array( 'status' => $result["status"][$key] ),
          array( 'comment' => $result["comment"][$key] ),
          array( 'ID' => $id )
        );
      }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы