【问题标题】:php - push array into array - key issuephp - 将数组推入数组 - 关键问题
【发布时间】:2012-03-22 05:24:43
【问题描述】:

我正在尝试将多个数组推送到 1 个大数组中,从而生成一个 2 lvl 数组。

我得到了这组数组,例如:

大批 ( [鳕鱼] => ddd [denum] => ffffffffffffffff [描述] => ggggggg [不能] => 3 ) 大批 ( [鳕鱼] => fff [denum] => dfgdfgdfgdfgdfg [描述] => dfgdfgdfgdfgdfg [不能] => 33 )

但是,在数组推送之后,我得到了这个数组:

大批 ( [0] => 数组 ( [0] => ddd [1] => ffffffffffffffff [2] => gggggg [3] => 3 ) [1] => 数组 ( [0] => fff [1] => dfgdfgdfgdfgdfg [2] => dfgdfgdfgdfgdfg [3] => 33 ) )

基本上这就是我想要做的,但是,如果你在按下后注意到,键会被遗忘,并转换为数字。

这就是我想要的样子:

大批 ( [0] => 数组 ( [鳕鱼] => ddd [denum] => ffffffffffffffff [描述] => ggggggg [不能] => 3 ) [1] => 数组 ( [鳕鱼] => fff [denum] => dfgdfgdfgdfgdfg [描述] => dfgdfgdfgdfgdfg [不能] => 33 ) )

我使用的示例代码:

$res_arr_values = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
   {
       array_push($res_arr_values, array_values($row));
   }

有人可以帮我吗?

【问题讨论】:

    标签: php arrays key push


    【解决方案1】:

    使用这个..

    $res_arr_values = array();
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        $res_arr_values[] = $row;
    }
    

    【讨论】:

    • array_push 和这个语法是一样的。
    • array_push() 保留键 array_values() 不会。
    • 我没有使用array_push。我已经从答案中删除了 array_values
    • 问题不是你的例子,而是你的解释。这是错误的。在回答之前做你的研究。
    【解决方案2】:

    不要在您的$row 上使用array_values

    $res_arr_values = array();
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
       {
           array_push($res_arr_values, $row);
       }
    

    另外,向数组添加值的首选方法是写入$array[] = $value;,而不是使用array_push

    $res_arr_values = array();
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
       {
           $res_arr_values[] = $row;
       }
    

    并且进一步的优化不是调用mysql_fetch_array($result, MYSQL_ASSOC),而是直接使用mysql_fetch_assoc($result)

    $res_arr_values = array();
    while ($row = mysql_fetch_assoc($result))
       {
           $res_arr_values[] = $row;
       }
    

    【讨论】:

    • '向数组添加值的首选方法是编写 $array[] = $value; ' 这很深刻,谢谢,提醒自己这一点有助于保持程序简单
    【解决方案3】:

    我认为你必须去

    $arrayname[indexname] = $value;
    

    【讨论】:

      【解决方案4】:
      $res_arr_values = array();
      while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
      {
          $res_arr_values[] = $row;
      }
      
      
      array_push == $res_arr_values[] = $row;
      
      example 
      
      <?php
      $stack = array("orange", "banana");
      array_push($stack, "apple", "raspberry");
      print_r($stack);
      
      Array
      (
          [0] => orange
          [1] => banana
          [2] => apple
          [3] => raspberry
      )
      ?>
      

      【讨论】:

      • 您是否会考虑添加一些叙述来解释此代码为何有效,以及是什么使它成为问题的答案?这对提出问题的人以及其他任何出现的人都非常有帮助。
      • @user1248047 不想学习array_push函数,他/她只是想知道如何防止替换键值
      • 在此之前一年写了多个答案,显示了该技术。我没有看到这个答案增加了任何价值。如果我错了,请添加对此答案的新内容的解释。
      【解决方案5】:

      先把你的数组也转换成 JSON

      while($query->fetch()){
         $col[] = json_encode($row,JSON_UNESCAPED_UNICODE);
      }
      

      然后将其转换回数组

      foreach($col as &$array){
         $array = json_decode($array,true);
      }
      

      祝你好运

      【讨论】:

      • 转换成 json 有什么好处?答:没有。抱歉,此回答对本次问答没有帮助。
      【解决方案6】:

      所有这些答案都很好,但是在考虑时......
      有时,没有复杂性的最简单的方法会更快地完成任务,并且没有特殊功能。

      我们首先设置数组:

      $arr1 = Array(
      "cod" => ddd,
      "denum" => ffffffffffffffff,
      "descr" => ggggggg,
      "cant" => 3
      );
      $arr2 = Array
      (
      "cod" => fff,
      "denum" => dfgdfgdfgdfgdfg,
      "descr" => dfgdfgdfgdfgdfg,
      "cant" => 33
      );
      

      然后我们将它们添加到新数组中:

      $newArr[] = $arr1;
      $newArr[] = $arr2;
      

      现在让我们看看包含所有键的新数组:

      print_r($newArr);
      

      无需sql或特殊函数即可构建新的多维数组....不要使用坦克到达您可以步行的地方。

      【讨论】:

      • 感谢您为其他读者提供简单的答案。 (请注意,这与接受的答案显示的技术相同。它只是看起来更复杂 there,因为它是在问题的上下文中回答的。接受答案的关键行是:$res_arr_values[] = $row; ,与此答案的$newArr[] = $arr1;) 相同
      • 确实如此。我同意每一个字。 :)
      猜你喜欢
      • 2013-07-30
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2012-10-19
      • 1970-01-01
      相关资源
      最近更新 更多