【问题标题】:How to push both value and key into PHP array如何将值和键都推送到 PHP 数组中
【发布时间】:2011-01-08 10:58:23
【问题描述】:

看看这段代码:

$GET = array();    
$key = 'one=1';
$rule = explode('=', $key);
/* array_push($GET, $rule[0] => $rule[1]); */

我正在寻找这样的东西:

print_r($GET);
/* output: $GET[one => 1, two => 2, ...] */

有这样的功能吗? (因为array_push 不会这样工作)

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    不,关联数组没有 array_push() 等效项,因为无法确定下一个键。

    你必须使用

    $arrayname[indexname] = $value;
    

    【讨论】:

    • 如何将多个键和值添加到数组中?例如我有 [indexname1] = $value1 和 [indexname2] = $value2,我想将它们添加到 $arrayname
    • @KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2); 会将它们设置为$arrayname 中的唯一项目。如果您已经设置了$arrayname 并希望保留其值,请尝试$arrayname += $anotherarray。请记住,第一个数组中的任何现有键都将被第二个覆盖。
    • “请记住,第一个数组中的任何现有键都将被第二个覆盖”这是不正确的,第一个数组具有优先权。如果你这样做$a = array("name" => "John"); $a += array("name" => "Tom");然后$a["name"] 将是“约翰”
    • 这是两个中更快的一个:array_push 与 array[]。如果我没记错的话,Array[] 的速度大约是 2 倍……
    • 这非常好,可能是命名键数组的最佳选择;只确保键名(命名索引)不会与已经存在的键名冲突。在开始将项目“推入”之前,还要确保父数组首先存在。
    【解决方案2】:

    将值推入数组会自动为其创建一个数字键。

    将键值对添加到数组时,您已经拥有键,不需要为您创建一个。将键推入数组没有意义。只能设置数组中特定键的值。

    // no key
    array_push($array, $value);
    // same as:
    $array[] = $value;
    
    // key already known
    $array[$key] = $value;
    

    【讨论】:

      【解决方案3】:

      您可以使用联合运算符(+)来组合数组并保留添加的数组的键。例如:

      <?php
      
      $arr1 = array('foo' => 'bar');
      $arr2 = array('baz' => 'bof');
      $arr3 = $arr1 + $arr2;
      
      print_r($arr3);
      
      // prints:
      // array(
      //   'foo' => 'bar',
      //   'baz' => 'bof',
      // );
      

      所以你可以做$_GET += array('one' =&gt; 1);。

      在http://php.net/manual/en/function.array-merge.php 的文档中有更多关于联合运算符与array_merge 用法的信息。

      【讨论】:

      • array_merge() 和 + 运算符之间的基本区别在于,当 2 个数组包含同一键上的值时,+ 运算符忽略来自第二个数组的值(不覆盖),它也确实如此不重新编号/重新索引数字键...
      【解决方案4】:

      不知道为什么最简单的方法还没贴出来:

      $arr = ['company' => 'Apple', 'product' => 'iPhone'];
      $arr += ['version' => 8];
      

      【讨论】:

      • 不完全一样,在array_merge中,右边的数组在key冲突时获胜,在“+=”中左边的数组获胜
      • @santiagoarizti 你所说的“胜利”是什么意思?
      • 如果两个数组都具有相同的键,array_merge 和 array union (+=) 的行为方式相反,即 array_merge 将尊重来自第二个数组的值并且数组联合将尊重第一个数组中的值。
      【解决方案5】:

      我想将我的答案添加到表格中,这里是:

      //connect to db ...etc
      $result_product = /*your mysql query here*/ 
      $array_product = array(); 
      $i = 0;
      
      foreach ($result_product as $row_product)
      {
          $array_product [$i]["id"]= $row_product->id;
          $array_product [$i]["name"]= $row_product->name;
          $i++;
      }
      
      //you can encode the array to json if you want to send it to an ajax call
      $json_product =  json_encode($array_product);
      echo($json_product);
      

      希望这会对某人有所帮助

      【讨论】:

        【解决方案6】:

        正是佩卡所说的……

        或者,如果你愿意,你也可以像这样使用 array_merge:

        array_merge($_GET, array($rule[0] => $rule[1]));
        

        但我可能更喜欢 Pekka 的方法,因为它更简单。

        【讨论】:

          【解决方案7】:

          我只是在寻找同样的东西,然后我意识到,我的想法再次不同,因为我是老派。我一直回到 BASIC 和 PERL,有时我忘记了 PHP 是多么容易。

          我刚刚创建了这个函数来从数据库中获取所有设置,它们是 3 列。 setkey, item (key) & value (value) 并使用相同的键/值将它们放入一个名为 settings 的数组中,而无需像上面那样使用 push。

          真的很简单很简单

          // 获取所有设置 $settings=getGlobalSettings(); // 应用用户主题选择 $theme_choice = $settings['theme']; ..等等等等等等.. 函数 getGlobalSettings(){ $dbc = mysqli_connect(wds_db_host, wds_db_user, wds_db_pass) 或 die("MySQL 错误:" .mysqli_error()); mysqli_select_db($dbc, wds_db_name) 或 die("MySQL 错误:" .mysqli_error()); $MySQL = "SELECT * FROM systemSettings"; $result = mysqli_query($dbc, $MySQL); 而($row = mysqli_fetch_array($result)) { $settings[$row['item']] = $row['value']; // 无需推送 } mysqli_close($dbc); 返回$设置; }

          所以就像其他帖子解释...

          键 => 值

          AND... 也不需要先定义数组。

          $array=array();

          不需要定义或推送。只需分配 $array[$key] = $value;它自动同时是推送和声明。

          出于安全原因,我必须补充一点,(P)oor(H)elpless(P)保护,我的意思是傻瓜编程,我的意思是PHP....呵呵,我建议您仅将这个概念用于我的意图.任何其他方法都可能存在安全风险。在那里,做了我的免责声明!

          【讨论】:

            【解决方案8】:

            这是可能对你有用的解决方案

            Class Form {
            # Declare the input as property
            private $Input = [];
            
            # Then push the array to it
            public function addTextField($class,$id){
                $this->Input ['type'][] = 'text';
                $this->Input ['class'][] = $class;
                $this->Input ['id'][] = $id;
            }
            
            }
            
            $form = new Form();
            $form->addTextField('myclass1','myid1');
            $form->addTextField('myclass2','myid2');
            $form->addTextField('myclass3','myid3');
            

            当你转储它时。结果是这样的

            array (size=3)
              'type' => 
                array (size=3)
                  0 => string 'text' (length=4)
                  1 => string 'text' (length=4)
                  2 => string 'text' (length=4)
              'class' => 
                array (size=3)
                  0 => string 'myclass1' (length=8)
                  1 => string 'myclass2' (length=8)
                  2 => string 'myclass3' (length=8)
              'id' => 
                array (size=3)
                  0 => string 'myid1' (length=5)
                  1 => string 'myid2' (length=5)
                  2 => string 'myid3' (length=5)
            

            【讨论】:

              【解决方案9】:

              有点晚了,但如果你不介意嵌套数组,你可以采用这种方法:

              $main_array = array(); //Your array that you want to push the value into
              $value = 10; //The value you want to push into $main_array
              array_push($main_array, array('Key' => $value));
              

              为了澄清, 如果你输出json_encode($main_array),它看起来像[{"Key":"10"}]

              【讨论】:

                【解决方案10】:

                有点奇怪,但这对我有用

                    $array1 = array("Post Slider", "Post Slider Wide", "Post Slider");
                    $array2 = array("Tools Sliders", "Tools Sliders", "modules-test");
                    $array3 = array();
                
                    $count = count($array1);
                
                    for($x = 0; $x < $count; $x++){
                       $array3[$array1[$x].$x] = $array2[$x];
                    }
                
                    foreach($array3 as $key => $value){
                        $output_key = substr($key, 0, -1);
                        $output_value = $value;
                        echo $output_key.": ".$output_value."<br>";
                    }
                

                【讨论】:

                  【解决方案11】:
                   $arr = array("key1"=>"value1", "key2"=>"value");
                      print_r($arr);
                  

                  // 打印数组['key1'=>"value1", 'key2'=>"value2"]

                  【讨论】:

                    【解决方案12】:

                    简单的方法:

                    $GET = array();    
                    $key = 'one=1';
                    parse_str($key, $GET);
                    

                    http://php.net/manual/de/function.parse-str.php

                    【讨论】:

                      【解决方案13】:
                      array_push($arr, ['key1' => $value1, 'key2' => value2]);
                      

                      这很好用。 在数组中创建具有其值的键

                      【讨论】:

                      • 投反对票。这只是在现有 $arr 数组的末尾推送一个新数组。
                      【解决方案14】:

                      你好,我有同样的问题,我发现这个解决方案你应该使用两个数组,然后将它们结合起来

                       <?php
                      
                      $fname=array("Peter","Ben","Joe");
                      
                      $age=array("35","37","43");
                      
                      $c=array_combine($fname,$age);
                      
                      print_r($c);
                      
                      ?>
                      

                      参考:w3schools

                      【讨论】:

                        【解决方案15】:

                        示例 array_merge()....

                        $array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result);

                        Array([color] => green,[0] => 2,[1] => 4,[2] => a,[3] => b,[shape] => 梯形,[4] => 4,)

                        【讨论】:

                          【解决方案16】:

                          使用key 和value 添加到第一个位置

                          $newAarray = [newIndexname => newIndexValue] ;
                          
                          $yourArray = $newAarray + $yourArray ;
                          

                          【讨论】:

                            【解决方案17】:

                            我写了一个简单的函数:

                            function push(&$arr,$new) {
                                $arr = array_merge($arr,$new);
                            }
                            

                            这样我就可以轻松“插入”新元素:

                            push($my_array, ['a'=>1,'b'=>2])
                            

                            【讨论】:

                              【解决方案18】:
                              array_push($GET, $GET['one']=1);
                              

                              它对我有用。

                              【讨论】:

                              • 这会执行$GET['one']=1,然后使用该语句的返回值(=1,右值),然后执行array_push($GET, 1)。结果 = [0]->1, [one]->1
                              【解决方案19】:

                              这里已经给出了一些很好的例子。只需添加一个简单的示例即可将关联数组元素推送到根数字索引索引。

                              $intial_content = array();
                              
                              if (true) {
                               $intial_content[] = array('name' => 'xyz', 'content' => 'other content');
                              }
                              

                              【讨论】:

                                【解决方案20】:

                                我通常这样做:

                                $array_name = array(
                                'key1' => 'value1',
                                'key2' => 'value2',
                                'key3' => 'value3'
                                );
                                

                                【讨论】:

                                猜你喜欢
                                • 2011-06-17
                                • 2013-11-09
                                • 2017-09-25
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2015-02-09
                                相关资源
                                最近更新 更多