繁体   English   中英

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

[英]How to push both value and key into PHP array

看看这段代码:

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

我正在寻找这样的东西,以便:

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

是否有 function 可以做到这一点? (因为array_push不会这样工作)

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

你必须使用

$arrayname[indexname] = $value;

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

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

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

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

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

<?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用法的信息。

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

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

希望这会帮助某人

正是佩卡所说的……

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

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

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

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

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

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

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

真的很简单很简单

// 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中,当你使用时不需要“推”一个数组

键 => 值

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

$array=array();

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

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

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

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)

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

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

看一下这段代码:

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

有点奇怪,但这对我有用

    $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>";
    }
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

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

array_push($arr, ['key1' => $value1, 'key2' => value2]);

这工作得很好。 使用数组中的值创建键

简单的方法:

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

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

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

 <?php

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

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

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

print_r($c);

?>

参考: w3schools

示例 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);

数组([颜色] => 绿色,[0] => 2,[1] => 4,[2] => a,[3] => b,[形状] => 梯形,[4] => 4 ,)

用于使用keyvalue添加到第一个位置

$newAarray = [newIndexname => newIndexValue] ;

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

这个对我有用。

我写了一个简单的函数:

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

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

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

2023年

很多答案。 有些有用,有些很好但很尴尬。 由于您不需要复杂且昂贵的算术运算、循环等来执行向数组添加元素这样的简单操作,因此这是我的One-Liner-Add-To-Array-Functions集合。

$array = ['a' => 123, 'b' => 456]; // init Array

$array['c'] = 789; // 1.
$array += ['d' => '012']; // 2.
$array = array_merge($array, ['e' => 345]); // 3.
$array = [...$array, 'f' => 678]; // 4.

print_r($array);
// Output:
/* 
Array
(
    [a] => 123
    [b] => 456
    [c] => 789
    [d] => 012
    [e] => 345
    [f] => 678
)
*/

在 99,99% 中,我使用版本 1 $array['c'] = 789; )。 但我喜欢第 4 版 这是带有 splat 运算符的版本 ( https://www.php.net/manual/en/migration56.new-features.php )。

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

`$intial_content = array();

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

我通常这样做:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM