sql插入多个数组并计数

时间:2019-05-14 05:58:53

标签: php sql arrays

我从帖子中获取数组以插入数据库。我从表格的“天”选项卡获取名称。我正在插入一个循环,但无法获得总数。有些天是空的,有些是不同的总数。

试图为他们添加隐藏的输入,但无法成功。我想也许我可以计算总数并使其达到循环限制。

我正在使用此代码将数组插入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" }

编辑: 非常感谢。我可以用你的方式计算数组,但是我为我的解决方案想了错方法。我添加了循环插入代码。对于前。数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   |     |     |      |     |     |  

1 个答案:

答案 0 :(得分:2)

您可以使用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))));