PHP:填充多维数组,同时检查重复项并更新数量(如果找到)

时间:2017-03-08 09:19:31

标签: php arrays multidimensional-array

我尝试在材料拣选页面中进行改进,之前显示的每个项目都没有检查重复数量,因此有时项目会多次出现,而不仅仅是更改数量。

我认为最好重新编写代码来填充多维数组,并每次检查数组是否有重复。

以下是代码:

$get_materials = MySqlDb::query("SELECT * FROM material_item WHERE link_id = '$ids'");

  while($row = mysqli_fetch_array($get_materials)) {
   if($row['option_1_answers'] == '' && $row['option_2_answers'] == '' &&    $row['option_3_answers'] == '' && $row['option_4_answers'] == '') {

  // vvvvvvvvvvvvvvvvvvvvvvvvvv    Relevant section which I need to copy below once correct

   $key = array_search($row['standard'],$comparision_string);
     if($key !== false) {
      $comparision_string[$key]["quantity"] += $row['quantity'];
    }else{
      $comparision_string[$number_count]["description"] = $row['standard'];
      $comparision_string[$number_count]["quantity"] = $row['quantity'];
    }

  //END of relevant section ^^^^^^^^^^^^^^^^^^^^^^^^^^


}elseif($row['option_1_answers'] != '' && $row['option_2_answers'] == '' && $row['option_3_answers'] == '' && $row['option_4_answers'] == '') {
  $comparision_string[$number_count]["description"] = $row['standard'] . "[" . $row['option_1_title'] . " = " . $row['option_1_answers'] . "]";
}elseif($row['option_1_answers'] != '' && $row['option_2_answers'] != '' && $row['option_3_answers'] == '' && $row['option_4_answers'] == '') {
  $comparision_string[$number_count]["description"] = $row['standard'] . "[" . $row['option_1_title'] . " = " . $row['option_1_answers'] . "]" . "[" . $row['option_2_title'] . " = " . $row['option_2_answers'] . "]";
}elseif($row['option_1_answers'] != '' && $row['option_2_answers'] != '' && $row['option_3_answers'] != '' && $row['option_4_answers'] == '') {
  $comparision_string[$number_count]["description"] = $row['standard'] . "[" . $row['option_1_title'] . " = " . $row['option_1_answers'] . "]" . "[" . $row['option_2_title'] . " = " . $row['option_2_answers'] . "]" . "[" . $row['option_3_title'] . " = " . $row['option_3_answers'] . "]";
}elseif($row['option_1_answers'] != '' && $row['option_2_answers'] != '' && $row['option_3_answers'] != '' && $row['option_4_answers'] != '') {
  $comparision_string[$number_count]["description"] = $row['standard'] . "[" . $row['option_1_title'] . " = " . $row['option_1_answers'] . "]" . "[" . $row['option_2_title'] . " = " . $row['option_2_answers'] . "]" . "[" . $row['option_3_title'] . " = " . $row['option_3_answers'] . "]". "[" . $row['option_4_title'] . " = " . $row['option_4_answers'] . "]";
}
$comparision_string[$number_count]["quantity"] = $row['quantity'];
$comparision_string[$number_count]["collected"] = $row['collected'];
$comparision_string[$number_count]["ordered"] = $row['ordered'];
$comparision_string[$number_count]["collect_by"] = $row['collect_by'];
$comparision_string[$number_count]["order_by"] = $row['order_by'];
$comparision_string[$number_count]["datetime_ordered"] = $row['datetime_ordered'];
$comparision_string[$number_count]["datetime_collected"] = $row['datetime_collected'];
$comparision_string[$number_count]["ids"] = $row['ids'];
$comparision_string[$number_count]["standard"] = $row['standard'];


echo "<tr><td><img src='" . $row['image'] . "'></td><td>" .$comparision_string[$number_count]['quantity'] . " of " . $comparision_string[$number_count]['description'] . "</td><td>";

我得到一个警告:array_search()期望参数2是数组,在

中给出null

我想有A)一种方法可以使这项工作和B)一种更好的方法

1 个答案:

答案 0 :(得分:2)

您要求array_search()$row['standard']之前找到$comparision_string才能宣布这一点 - 这对您来说永远不会有效。

此外,我无法理解你想要实现的目标。你是否计算总共4个答案中的总答案?如果答案2和4为空怎么办?你的病情阻滞不会发现。

我没有看到$number_count是什么的声明。没有它,它将永久为0。

我非常怀疑你的$comparision_string[$number_count]["description"]价值分配过程不会产生你想要得到的东西 - 但同样,我真的不知道你在做什么。

我会假设您在查询中使用$ids之前正在对其进行清理/验证。

是的,我同意你的意见,有:

  

A)使这项工作的方法和B)更好的方法

但是没有人可以自信地帮助你缺乏有关你正在进行的任务的信息。

最后一个假设:如果你想计算四个options_n_answers中有多少个空值,那么你可以这样做:

// isolate the four answer elements
$answers_array=array($row['option_1_answers'],$row['option_2_answers'],
                     $row['option_3_answers'],$row['option_4_answers']);
// retain only empty valued elements
$empty_answers_array=array_intersect($answers_array,array(''));
// count the empties
$empty_answer_count=sizeof($empty_answers_array);
// then you can subtract that from sizeof($answers_array) or whatever you need