【问题标题】:php array delete some values and reorderphp数组删除一些值并重新排序
【发布时间】:2016-10-05 03:29:25
【问题描述】:

(添加更多信息) 您好,我在用 php 填充数组时遇到了一些问题,我做了一个 mysql 查询来获取两个日期之间的数据,结果如下:

"SELECT hours FROM dates WHERE id='2' AND (day BETWEEN 'TODAY' AND 'TODAY +2 DAYS') ORDER BY day ASC, hours ASC" [Seudo code]

0-> 1:data10 2:-       3:-
1-> 1:data11 2:-       3:-
2-> 1:data12 2:-       3:-
3-> 1:-      2:data23  3:-
4-> 1:-      2:data24  3:-
5-> 1:-      2:data25  3:-
6-> 1:-      2:-       3:data36
7-> 1:-      2:-       3:data37
8-> 1:-      2:-       3:data38

html result from above array

但我需要的是这样的:

0-> 1:data10  2:data23     3:data36
1-> 1:data11  2:data24     3:data37
2-> 1:data12  2:data25     3:data38

html result with reorder array

如果只有一个(或 2)列有值,则其他值应该是“-”

0-> 1:data10  2:data20     3:data30
1-> 1:-11     2:data21     3:-31
2-> 1:data12  2:-22        3:data32

有没有办法从数组中删除或添加“-”并重新排序其他值和键? 谢谢! PD:如果我遗漏了一些数据,请告诉我。

【问题讨论】:

  • 你能提供你的代码吗?意思是你做了什么
  • 从数组中删除“-”并不难,但问题是您希望如何将数据重新排列到新数组中。从您的示例中,我无法分辨 0-> 2:data 或 0->3:data 来自哪里。
  • 如果您提供您的实际查询,那么它可能会提供您想要实现的目标的一些背景信息 - 目前信息太少,无法提供有意义的答案
  • 您好,问题已编辑,包含更多信息,谢谢!

标签: php mysql arrays multidimensional-array


【解决方案1】:

从数组中删除一些索引后,您想以相同的索引格式获取数组,或者说重新索引尝试使用

 array_values($array); 

此数组函数重新排列数组索引。享受 Stackoverflow。

【讨论】:

    【解决方案2】:

    首先通过此代码删除数组值:

     unset($array[$index]);
    

    然后像这样重新订购:

    array_values($array); 
    

    【讨论】:

      【解决方案3】:

      我为您的问题编写了以下代码。您希望 result 的内部数组具有 3 个键,这就是我编写 "if($s_key >= 3)" 的原因,您可以根据需要对其进行更新。目前你不想要 '-' 这就是为什么我写了 "if($val != '-')" 你可以根据需要添加更多条件。

      谢谢。

      快乐编码

      //sample data
      
      $data = array (array('111','-','222'),array('3333','-','444'),array('-','-','444'),array('4545','77','444'),array('-','454','444'),array('-','98','444'));
      $formatted_data = array();
      $f_key = $s_key = 0;
      foreach($data as $arr_key => $arr) {
          foreach($arr as $key => $val){
              if($val != '-'){  
                  $formatted_data[$f_key][$s_key] = $val;
                  $s_key++;
                  if($s_key >= 3){             
                      $s_key = 0;
                      $f_key++;
                  }        
              }
          }
      }
      echo '<pre>';
      print_r($formatted_data);

      【讨论】:

      • 感谢您的回答,代码连接数组键的数据,如 0->7:008:009:00,在 1-> hourshourshours,我正在尝试构建类似 0-> [1]7:00[2]8:00[3]9:00,谢谢
      • 我已经编辑了我的答案,从中删除了测试代码行。输出:array(4) { [0]=> array(3) { [0]=> string(3) "111" [1]=> string(3) "222" [2]=> string(4) "3333" } [1]=> 数组(3) { [0]=> 字符串(3) "444" [1]=> 字符串(3) "444" [2]=> 字符串(4) "4545" } [2]=> 数组(3) { [0]=> 字符串(2) "77" [1]=> 字符串(3) "444" [2]=> 字符串(3) "454" } [3 ]=> array(3) { [0]=> string(3) "444" [1]=> string(2) "98" [2]=> string(3) "444" } }
      • 输出数组:数组([0] => 数组([0] => 111 [1] => 222 [2] => 3333)[1] => 数组([0] = > 444 [1] => 444 [2] => 4545 ) [2] => 数组 ( [0] => 77 [1] => 444 [2] => 454 ) [3] => 数组 ( [0] ] => 444 [1] => 98 [2] => 444 ) ) 这就是你想要的伙计?
      • 嗨!你的代码很好,但重新排序应该在列中,例如数组中的第一个位置应该是(111,77,222),第二个(3333,454,444),第三个(4545,98,444)......请让我知道是否解释一下,谢谢!问候
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多