如何将值和键都推送到 PHP 数组中

Posted

技术标签:

【中文标题】如何将值和键都推送到 PHP 数组中【英文标题】:How to push both value and key into PHP array 【发布时间】: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 不会这样工作)

【问题讨论】:

【参考方案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_mergearray 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】:

使用keyvalue 添加到第一个位置

$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'
);

【讨论】:

这不是数组推送,尽管它对问题没有帮助。在这里检查并修正你的答案。 array_push ( $array , $values ) php.net/manual/en/function.array-push.php

以上是关于如何将值和键都推送到 PHP 数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从 listObjects 推送到数组

如何将值推送到 Cypher 中的属性数组?

如何按键过滤数组并使用javascript将值推送到另一个数组

如何将值推送到 QML 属性变量二维数组 - 动态?

Ios NSDictionary 数组 - 分组值和键

Flutter Firebase 数据库,DataSnapshot?如何获取值和键,null 安全