如何将值和键都推入PHP数组


355

看一下这段代码:

$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这样行不通)

Answers:


759

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

您必须使用

$arrayname[indexname] = $value;

10
我不明白 这不是将项目添加到数组中的正常方法吗?
13年

如何将多个键和值添加到数组?例如,我有[indexname1] = $ value1和[indexname2] = $ value2,我想将它们添加到$ arrayname
King Goeks 2013年

8
@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2);会将其设置为中的唯一项$arrayname。如果您已经$arrayname设置并且想要保留其值,请尝试$arrayname += $anotherarray。请记住,第一个数组中的任何现有键都将被第二个覆盖。
Charlie Schliesser 2013年

1
“请记住第一个数组中的所有现有键都将被第二个覆盖”,这是不正确的,第一个数组具有优先级。如果您这样做,$a = array("name" => "John"); $a += array("name" => "Tom");那么$a["name"]将是“约翰”
圣地亚哥·亚利桑那

这是最简单的方法。
NomanJaved

75

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

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

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

// key already known
$array[$key] = $value;

66

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

<?php

$arr1 = array('foo' => 'bar');
$arr2 = array('baz' => 'bof');
$arr3 = $arr1 + $arr2;

print_r($arr3);

// prints:
// array(
//   'foo' => 'bar',
//   'baz' => 'bof',
// );

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

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


4
array_merge()+运算符之间的基本区别是,当2个数组包含同一键上的值时,+运算符将忽略第二个数组中的值(不覆盖),也不会对数字键进行重新编号/重新索引...
jave.web

谢谢,我已经尝试了许多数组函数,但是您的回答帮助我实现了我想要的,
丹麦

21

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

//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);

希望这会帮助某人


1
我浏览了数十种解决方案,这是唯一适合我的用例的解决方案。谢谢!
瑞安·伯尼

20

恰恰是Pekka所说的...

另外,如果需要,您可能可以像这样使用array_merge:

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

但是我更喜欢Pekka的方法,因为它要简单得多。


11

我想知道为什么尚未发布最简单的方法:

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

2
它并不完全相同,在array_merge中,右边的数组在键冲突中获胜,在“ + =”中,左边的数组获胜
圣地亚哥·阿里斯蒂

@santiagoarizti“胜利”是什么意思?
AlexioVay

1
如果两个数组都具有相同的键,array_merge并且数组union+=)的行为相反,即array_merge将尊重第二个数组的值,而数组union将尊重第一个数组的值。
圣地亚哥·亚利桑那

对我来说是完美的解决方案。THX分享Alexio!:)
ThomasB

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)

7

我只是在寻找同一件事,所以我又一次意识到,我的思想有所不同,因为我是高中生。我一直回到BASIC和PERL,有时我忘记了PHP真的很简单。

我刚刚进行了此功能,以从数据库中包含3列的所有设置中获取所有设置。setkey,item(键)和value(值),然后使用相同的键/值将它们放入名为settings的数组中,而无需像上面那样使用push。

真的很简单

//获取所有设置
$ settings = getGlobalSettings();


//应用用户主题选择
$ theme_choice = $ settings ['theme'];

.. etc etc etc ..




函数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);
    while($ row = mysqli_fetch_array($ result)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; //不需要推送
        }
    mysqli_close($ dbc);
返回$ settings;
}


因此,就像其他帖子解释的那样...在php中,使用时无需“推送”数组

键=>值

AND ...也无需先定义数组。

$ array = array();

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

为了安全起见,我必须补充一点,(P)oor(H)elpless(P)retection,我的意思是“傻瓜编程”,我的意思是PHP...。任何其他方法都可能带来安全风险。在那里,我发表了免责声明!



4

有点晚了,但是如果您不介意嵌套数组,则可以采用以下方法:

$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”}]


4

有点奇怪,但这对我有用

    $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>";
    }

3
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

//打印array ['key1'=>“ value1”,'key2'=>“ value2”]


2

您好,我遇到了同样的问题,我找到了这个解决方案,您应该使用两个数组,然后将两者组合

 <?php

$fname=array("Peter","Ben","Joe");

$age=array("35","37","43");

$c=array_combine($fname,$age);

print_r($c);

?>

参考:w3schools



2

用于通过key和添加到第一个位置value

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;

2

要将“键”和“值”推送到现有数组,可以使用+=快捷键运算符。

看这个非常简单的例子:

$GET = [];
$GET += ['one' => 1];

的结果print_r($GET)将是:

Array
(
    [one] => 1
)

1

示例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,[形状] =>梯形,[4] => 4 ,)


1
array_push($GET, $GET['one']=1);

这个对我有用。


这将执行$GET['one']=1,然后使用该语句的返回值(rvalue = 1),然后执行array_push($GET, 1)。结果= [0]-> 1,[one]-> 1
KekuSemau

0

我写了一个简单的函数:

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

这样我就可以轻松地“更新”新元素:

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

0

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

`$intial_content = array();

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

0

我通常这样做:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.