【问题标题】:Iterate over multiple arrays into php query遍历多个数组进入 php 查询
【发布时间】:2015-10-20 02:56:00
【问题描述】:

整体项目:

从 AJAX 保存多个数组

在 PHP 中遍历数组:

我已经通过使用array_combine 和 foreach 成功保存了 2 个数组(参见示例),但是现在

问题:

我有 20 多个动态内容数组需要迭代到我的查询语句中。

成功的 AJAX 示例

var setTitle = new Array();
    $('form input[name="setTitle[]"]').each(function () {
        setTitle.push($(this).val());
    });
    var setUnitId = new Array();
    $('form input[name="setUnitId[]"]').each(function () {
        setUnitId.push($(this).val());
    });

$.ajax({
        type: 'POST',
        url: 'form_process2_wkout.php',
        data: {
            setTitle:setTitle,
            setUnitId:setUnitId,
            // ...and so on...//
        },
        dataType: 'json',
        cache: false,
        async: false

PHP (form_process2_wkout.php) 正在接收每个 $_POST... 我已经将它们组合成一个数组...

    $setArray = array(
            $x_set_title,
            $x_set_unit_id,
            // ...and so on... //
    );

我已经 var_dump'ed 这个数组来测试...

$data= var_dump($setArray);
echo $data;

它产生以下内容:

array(24) {
    [0]=>
    array(3) {
    [0]=>
    string(9) "Ab Roller"
    [1]=>
    string(16) "Slide Back Lunge"
    [2]=>
    string(10) "Jump Squat"
    }
    [1]=>
    array(3) {
    [0]=>
    string(1) "2"
    [1]=>
    string(3) "879"
    [2]=>
    string(3) "872"
    }
    ...and so on...
}

不太清楚如何写信给foreach 来遍历这些项目:

foreach($setArray as $id => $key) {
    $set_title = mysqli_real_escape_string($dbc, $_POST['setTitle']);
    $set_unit_id = mysqli_real_escape_string($dbc, $_POST['setUnitId']);
    //...and so on.../

}

以便我可以在以下查询中使用它们:

$sql= "INSERT INTO ".$table1." (`goal_unit_id`,`goal_title`,...and so on...)
       VALUES ";
$sql.="('".$set_unit_id."','".$set_title."',...and so on...)";

我参考了许多其他方法,但没有运气:

PHP: Iterate over multiple arrays and build SQL INSERT query

array combine three or more arrays with php

Multiple index variables in PHP foreach loop

【问题讨论】:

  • $setArray = array_merge($x_set_title,$x_set_unit_id,// ...等等... //);试试这个

标签: php arrays ajax foreach


【解决方案1】:

使用全局或类变量来实现,如下所示,请参考PHP中的arra_map,array_merge api

<?php

$x_set_title = array('Ab Roller', 'Slide Back Lunge', 'Jump Squat');
$x_set_unit_id = array('2', '879', '872');

function escape_str($title, $id)
{
   $dbc = $GLOBALS['dbc'];
   $title = mysqli_real_escape_string($dbc, $title);    
   $id = mysqli_real_escape_string($dbc, $id);  
   return (array($title, $id));
}

$setArray = array_map('escape_str', $x_set_title,$x_set_unit_id);

print_r($setArray);

foreach($setArray as $oneArray)
{
    echo $oneArray[0].'  '.$oneArray[1];
}

【讨论】:

  • 功能是对的。传递参数可能会出错php.net/manual/en/function.array-map.php检查这个例子并修复参数错误
  • @stackoverflow.com/users/1662383/sundar 通读您提供的 php.net 手册。对我来说还是有点希腊化。我简化了你的功能测试...
  • 检查这个答案。如果您想传递多个参数,请使用php.net/manual/en/function.func-get-args.php
  • 我一直在试图弄清楚你的第二个参数 ($id) 是从哪里生成的?
  • 当数组映射函数调用 escape_str 时,$x_set_title 数组第 0 个元素和 $x_set_unit_id 第 0 个元素将被传递给函数。请进一步研究并查看 array_map API 中的示例,然后您就会明白。最好请在本地机器上执行示例并清楚地了解这一点
猜你喜欢
  • 1970-01-01
  • 2013-06-23
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 2014-09-02
  • 2017-04-30
相关资源
最近更新 更多