创建PHP数组,其中匹配键具有一些值

时间:2017-10-16 12:37:21

标签: php arrays

这是PHP菜鸟的第一篇文章。我的问题涉及一个HTML / PHP表单,它发布了由MySQL查询生成的以下三种类型的数据:

ID(始终通过隐藏的输入字段发布) 里程(只有一些条目可能完成,其他条目可能留空) 车辆类型(始终通过隐藏的输入字段发布)

此数据全部用于在数据发布页面之前的页面上选择的三家公司之一,即

第一步:选择公司和年份。按提交。

第二步:查看MySQL查询的结果,并在必要时输入里程数。按提交。

第三步:(这就是我在这里的原因)

我已经将这些数据填充到我(可能错误地)认为是一个名为$ idmilearray的多维数组中,使用以下代码:

if(isset($_POST['mileage'])) {
    $mileagenumber = $_POST['mileage'];
}

if(isset($_POST['idnos'])) {
    $idnumber = $_POST['idnos'];
}

if(isset($_POST['vehicle'])) { 
    $vehicletype = $_POST['vehicle'];
}

$idmilearray = array(
'ids' => $idnumber,
'mileage' => $mileagenumber,
'vtype' => $vehicletype
);


foreach($idmilearray as $inputs) {

$inputs = $idmilearray['ids'];
$inputs = $idmilearray['mileage'];
$inputs = $idmilearray['vtype'];

}

如果我在$ idmilearray上执行print_r,我会得到以下结果:

 Array
 (
  [ids] => Array
    (
        [0] => 35
        [1] => 22
        [2] => 32
        [3] => 38
        [4] => 36
        [5] => 39
        [6] => 16
        [7] => 20
        [8] => 48
        [9] => 46
    )

[mileage] => Array
    (
        [0] => 334
        [1] => 56
        [2] => 
        [3] => 43
        [4] => 
        [5] => 
        [6] => 
        [7] => 
        [8] => 11
        [9] => 5
    )

[vtype] => Array
    (
        [0] => 10T
        [1] => 10T
        [2] => 10T
        [3] => Artic
        [4] => 10T
        [5] => Artic
        [6] => Artic
        [7] => 10T
        [8] => Artic
        [9] => 10T
    )

我想要做的是创建另一个数组(我可以在以后的SQL查询中使用的值),但只有在[ids] [0]中的键包含某些的地方,[里程] [0]和[vtype] [0]等等。我想用[里程]作为'参考数组'。

我一直在玩array_intersect_key和array_diff_key,但是我遇到了一个很大而且非常讨厌的墙。任何人都可以帮忙或指点一下吗?

非常感谢你的时间。

此致

外部。

2 个答案:

答案 0 :(得分:0)

只需在现有 foreach中添加另一个foreach,然后通过使用if (!empty($old_array)) {}

检查旧数组值来填充新数组

示例:

foreach($idmilearray as $inputs) {
  $inputs = $idmilearray['ids'];
  $inputs = $idmilearray['mileage']; // This is the one you want, right?
  $inputs = $idmilearray['vtype'];
}

为了完成你需要的工作,它将是这样的:

$new_array = []; // Short array syntax (PHP 5.3+)
foreach($idmilearray as $inputs) {
  $inputs = $idmilearray['ids'];

  foreach($idmilearray['mileage'] as $mileage) {
    if (!empty($mileage)) {
      $new_array[] = $mileage;
    }
  }

  $inputs = $idmilearray['vtype'];
}

现在你有新数组($new_array)只填充了链接到现有值的键。

我希望它可以帮到你。

答案 1 :(得分:0)

您可以使用以下内容直接插入mysql:

foreach ( $idmilearray['mileage'] as $KEY => $VAL ) {
    if ( empty($VAL) ) continue;
    $query = "INSERT INTO `tableName` (id, mileage, vtype) VALUES ('{$idmilearray['ids'][$KEY]}', '$VAL', '{$idmilearray['vtype'][$KEY]}')";
}

或者,如果您真的想合并所有内容以进行进一步处理或出于任何原因,您可以这样做:

$NewArray = [];
foreach ( $idmilearray['mileage'] as $KEY => $VAL ) {
    if ( empty($VAL) ) continue;
    $NewArray[] = array('id' => $idmilearray['ids'][$KEY], 'mileage' => $VAL, 'vtype' => $idmilearray['vtype'][$KEY]);
}

当然还有很多其他可能的方法可以做到这一点,但考虑到你现在拥有的这些方法,这些方法最简单。