【问题标题】:sql Insert multiple arrays and count themsql 插入多个数组并计数
【发布时间】:2019-05-14 05:58:53
【问题描述】:

我从 post 获取数组以插入数据库。我从表单中的天数选项卡中获取名称。我正在制作一个循环插入,但无法获得它的总数。有些天数为空,有些天数不同。

尝试为他们添加隐藏输入,但未能成功。我想也许我可以计算总数组并使其成为循环限制。

我正在使用此代码将数组插入sql,但它只插入一个。从mon 开始计数是错误的,我知道,但我不知道如何获得所有数组的总循环限制:

$i = 0;
foreach($_POST['mon'] as $item){
    $mon= DB::control($_POST['mon'][$i],'text');
    $tue= DB::control($_POST['tue'][$i],'text');
    $wed= DB::control($_POST['wed'][$i],'text');
    $thu= DB::control($_POST['thu'][$i],'text');
    $fri= DB::control($_POST['fri'][$i],'text');
    $sat= DB::control($_POST['sat'][$i],'text');
    $sun= DB::control($_POST['sun'][$i],'text');
    $query = DB::insert("INSERT INTO work(mon,tue,wed,thu,fri,sat,sun) VALUES($mon,$tue,$wed,$thu,$fri,$sat,$sun)");
    $i++;
}

编辑:尝试计算数组,我可以计算完整数组但也计算空数组。

$d1 = count($_POST['mon']);
$d2 = count($_POST['tue']);
$d3 = count($_POST['wed']);     
$d4 = count($_POST['thu']);
$d5 = count($_POST['fri']);
$d6 = count($_POST['sat']);
$d7 = count($_POST['sun']);

$total = $d1+$d2+$d3+$d4+$d5+$d6+$d7;

编辑 Var_dump:

array(10) { ["city"]=> string(7) "Abcdef" ["que"]=> array(1) { [0]=> string(6) "que[]" } ["mon"]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" } ["tue"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "2" } ["wed"]=> array(1) { [0]=> string(0) "" } ["thur"]=> array(1) { [0]=> string(0) "" } ["fri"]=> array(1) { [0]=> string(0) "" } ["sat"]=> array(1) { [0]=> string(0) "" } ["sun"]=> array(1) { [0]=> string(6) "trial" } ["psd"]=> string(19) "psdAddReport" }

更新: 非常感谢。我可以用你的方式计算数组,但我认为我的解决方案是错误的。我为要插入的循环添加了 while 代码。例如。数了4,插了4次。这是我的错。

html 表单中的 TABS

Tab_City | Mon | Tue | Wed | Thur | Fri | Sat | Sun 
-----------------------------------------------------
 abc     | a   |  a  |  a  | aaa  | aa  |     |  aaa
         | a   |  a  |  a  | aaa  | aa  |     |  aaa
         | a   |  a  |     | aaa  | aa  |     |  aaa
         | a   |  a  |     | aaa  | aa  |     |  aaa
         | a   |  a  |     | aaa  | aa  |     |  aaa 
         | a   |     |     | aaa  | aa  |     |  aaa
         | a   |     |     |      | aa  |     |  aaa
         | a   |     |     |      | aa  |     |  aaa
         | a   |     |     |      | aa  |     | 
         | a   |     |     |      |     |     |         

有 50 个数组,但有 10 行。我计算了 50 个阵列,但现在我认为获得最大天数对我有用。请说我是否错了或任何简单的方法。我想学习编码。 谢谢。

SQL

id   |city | mon | tue | wed | thur | fri | sat | sun
-----|-----|-----|-----|------|-----|-----|------------
 1   |abc  | a   |  a  |  a  | aaa  | aa  |     |  aaa
 2   |abc  | a   |  a  |  a  | aaa  | aa  |     |  aaa
 3   |abc  | a   |  a  |     | aaa  | aa  |     |  aaa
 4   |abc  | a   |  a  |     | aaa  | aa  |     |  aaa
 5   |abc  | a   |  a  |     | aaa  | aa  |     |  aaa 
 6   |abc  | a   |     |     | aaa  | aa  |     |  aaa
 7   |abc  | a   |     |     |      | aa  |     |  aaa
 8   |abc  | a   |     |     |      | aa  |     |  aaa
 9   |abc  | a   |     |     |      | aa  |     | 
10   |abc  | a   |     |     |      |     |     |  

【问题讨论】:

  • 如果你不在循环中使用$item - 为什么不使用简单的for 循环呢?你到底要数什么?您能添加输入和期望输出的简单示例吗?
  • 我正在尝试添加来自表单天数的值。从网络上尝试不同的东西,$item 远离其中之一。表单选项卡是天。在每一天选项卡中,我都在输入工人姓名。我想做一个一周的表格。 $d1 = count($_POST['mon']); $d2 = count($_POST['tue']); $d3 = count($_POST['wed']); $d4 = count($_POST['thu']); $d5 = count($_POST['fri']); $d6 = count($_POST['sat']); $d7 = count($_POST['sun']); $总计 = $d1+$d2+$d3+$d4+$d5+$d6+$d7;

标签: php sql arrays


【解决方案1】:

您可以使用array_sum(array_map('count', $arr)) 来完成。数组映射将对每个元素执行count 函数,然后array_sum 将它们全部相加。使用array_filter过滤掉空数组

考虑以下示例:

$arr["mon"] = ["a", "b", "c"];
$arr["tue"] = null;
$arr["wed"] = [];
$arr["thu"] = ["1", "2"];

$total = array_sum(array_map('count', array_filter($arr)));

echo $total; // print 5

参考:array_sumarray_maparray_filter

编辑:

$_POST["mon"] = ["a", "b", "c"];
$_POST["bbb"] = null;
$_POST["city"] = "aaaaaa";
$_POST["psd"] = "psdAddReport";
$_POST["wed"] = [""];
$_POST["eee"] = ["55", 232];
$_POST["tue"] = ["1", "2"];

$days = ["mon", "wed", "tue"]; // can add here all days
foreach($_POST as $k => $v)
    if (in_array($k, $days))
        $arr[] = $v;
// now $arr contains only days element

$total = array_sum(array_map('count', array_map('array_filter',array_filter($arr))));

【讨论】:

  • 感谢您抽出宝贵时间。我认为这将解决我的问题。我如何将其应用于我的代码。例如,这是真的吗? $arr["mon"] = DB::control($_POST['mon'][$i],'text');正如你所说,我的 for each 循环是错误的。再次感谢和问候。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多