получить доступ к многомерному массиву - PullRequest
1 голос
/ 15 февраля 2012

Это своего рода продолжение моего последнего вопроса.Я пытаюсь получить доступ к данным многомерного массива, чтобы вставить в базу данных.Я искал по всем форумам, а также пробовал разные вещи самостоятельно, но не могу найти ничего, что работает.Вот как выглядит массив:

 $_POST[] = array[stake](
    'stakeholder1' => array(
        'partner'=> 'partner',
        'meet'=> 'meet'
    ),
    'stakeholder2' => array(
        'partner'=> 'partner',
        'agreement'=> 'agreement',
        'train'=> 'train',
        'meet'=> 'meet'
    ),
);

Я пытаюсь сделать что-то вроде (UPDATE list WHERE stakeholder = "stakeholder1" SET partner =1, meet =1) в зависимости от того, какие заинтересованные стороны были выбраны (есть четыре различных варианта).Спасибо,

Ответы [ 4 ]

1 голос
/ 15 февраля 2012

Этот параметр установит 1 для отмеченных параметров и 0 для непроверенных параметров (в противном случае вы пропустите некоторые обновления данных).

$optionsList = array('partner', 'agreement', 'train', 'meet');
$stakeHolders = array('stakeholder1', 'stakeholder2', ...);

foreach($stakeHolders as $stakeHolder)
{
  $selectedOptions = $_POST[$stakeHolder];

  $arInsert = array();
  foreach($optionsList as $option)
    $arInsert[] = '`'.$option.'` = '.intval(isset($selectedOptions[$option]));

  $sql = "UPDATE list
    SET ".implode(", ", $arInsert)."
    WHERE stakeholder = '".mysql_real_escape_string($stakeHolder)."'";

  // TODO: execute $sql (mysql_query(), or PDO call,
  // or any wrapper you use for DB)
}
0 голосов
/ 15 февраля 2012
$query = '';
foreach ($_POST as $k => $v) {
    $query .= "UPDATE list WHERE stakeholder = '$k' SET " . implode(" = 1," $v) . ",";
}
$query = substr($query, 0, -2); //Get rid of the final comma

Это должно дать вам что-то вроде того, что вы ищете, если я правильно понимаю схему вашей базы данных.

0 голосов
/ 15 февраля 2012

Если вы используете PDO, вы можете сделать что-то вроде:

foreach($_POST as $stakeholder => $data) {
    $sth = $dbh->prepare('UPDATE `list` SET `' . implode('` = 1, `', array_keys($data)) . '` = 1 WHERE stakeholder = ?');
    $sth->execute(array($stakeholder));
}

Обязательно дезинфицировать пользовательский ввод (ключи данных ...).

0 голосов
/ 15 февраля 2012
foreach($main_array as $key => $sub_array) {

  $sql = 'UPDATE list 
          WHERE stakeholder = "{$key}"
          SET ';

  $sets = array();

  foreach($sub_array as $column_value)
     $sets[] = $column_value." = 1";

  $sql = $sql.implode(',', $sets);


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...