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

时间:2010-01-23 00:44:23

标签: php arrays

看看这段代码:

$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不会以这种方式工作)

21 个答案:

答案 0 :(得分:653)

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

你必须使用

$arrayname[indexname] = $value;

答案 1 :(得分:66)

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

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

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

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

答案 2 :(得分:52)

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

<?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文档中联合运算符vs array_merge使用情况的更多信息。

答案 3 :(得分:19)

我想在表格中添加我的答案,现在是:

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

希望这会对某人有所帮助

答案 4 :(得分:17)

Pekka说的正是......

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

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

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

答案 5 :(得分:7)

我只是在寻找同样的事情,我意识到,再一次,我的想法是不同的,因为我老了。我一直回到BASIC和PERL,有时候我忘记了PHP中的事情真的很简单。

我刚刚使用此功能从数据库获取3列的所有设置。 setkey,item(key)&amp;使用相同的键/值将值(值)放入一个名为settings的数组中,而不像上面那样使用push。

非常简单&amp;很简单


// Get All Settings
$settings=getGlobalSettings();


// Apply User Theme Choice
$theme_choice = $settings['theme'];

.. etc etc etc ....




function getGlobalSettings(){

    $dbc = mysqli_connect(wds_db_host, wds_db_user, wds_db_pass) or die("MySQL Error: " . mysqli_error());
    mysqli_select_db($dbc, wds_db_name) or die("MySQL Error: " . mysqli_error());
    $MySQL = "SELECT * FROM systemSettings";
    $result = mysqli_query($dbc, $MySQL);
    while($row = mysqli_fetch_array($result)) 
        {
        $settings[$row['item']] = $row['value'];   // NO NEED FOR PUSH
        }
    mysqli_close($dbc);
return $settings;
}


所以像其他帖子一样解释...在php中,当你使用时不需要“推”一个数组

Key =&gt;值

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

$阵列=阵列();

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

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

答案 6 :(得分:7)

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

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 :(得分: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),它将显示为 [{&#34; Key&#34;:&#34; 10&#34;}]

答案 8 :(得分: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>";
    }

答案 9 :(得分:3)

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

//打印数组['key1'=&gt;“value1”,'key2'=&gt;“value2”]

答案 10 :(得分:2)

我想知道为什么还没有发布最简单的方法:

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

将两个数组与array_merge.

合并在一起就是一样的

答案 11 :(得分:2)

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

 <?php

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

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

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

print_r($c);

?>

参考:w3schools

答案 12 :(得分:2)

要将"key""value"推送到现有数组,可以使用+=快捷键运算符。

看这个非常简单的例子:

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

print_r($GET)的结果将是:

Array
(
    [one] => 1
)

希望这会有所帮助。

答案 13 :(得分:2)

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

适合我

答案 14 :(得分:1)

awk 'FNR==NR{a[$3]=$1;next}{print $0}' File2.txt File1.vcf > File3.vcf

这很好用。 使用数组

中的值创建键

答案 15 :(得分: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);

数组([color] =&gt; green,[0] =&gt; 2,[1] =&gt; 4,[2] =&gt; a,[3] =&gt; b,[shape] =&gt; ;梯形,[4] =&gt; 4,)

答案 16 :(得分:1)

简单的方法:

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

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

答案 17 :(得分:0)

用于通过keyvalue添加到第一位置

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;

答案 18 :(得分:0)

我写了一个简单的函数:

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

以便我可以轻松地“ upsert”新元素:

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

答案 19 :(得分:0)

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

`$intial_content = array();

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

答案 20 :(得分:-1)

我通常这样做:

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