array_push

(PHP 4, PHP 5, PHP 7, PHP 8)

array_push将一个或多个元素压入数组的末尾

说明

array_push(array &$array, mixed ...$values): int

array_push()array 视为堆栈,并将传递的变量压入 array 的末尾。 array 的长度将增加压入的变量数量。与以下效果相同

<?php
$array
[] = $var;
?>
对每个传递的值重复。

注意: 如果您使用 array_push() 向数组添加一个元素,最好使用 $array[] = ,因为这样就不会调用函数的开销。

注意: array_push() 如果第一个参数不是数组,将发出警告。这与 $var[] 的行为不同,在 PHP 7.1.0 之前,会创建一个新的数组。

参数

array

输入数组。

values

要压入 array 末尾的值。

返回值

返回数组中新的元素数量。

变更日志

版本 说明
7.3.0 此函数现在可以仅使用一个参数调用。以前,至少需要两个参数。

范例

范例 #1 array_push() 示例

<?php
$stack
= array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack);
?>

以上示例将输出

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
    [3] => raspberry
)

参见

添加注释

用户贡献的注释 36 注释

1230
Rodrigo de Aquino
12 年前
如果您要使用 array_push() 将 "$key" => "$value" 对插入到数组中,可以使用以下方法

$data[$key] = $value;

不需要使用 array_push。
bxi at apparoat dot nl
16 年前
我对 array_push() 和 $array[] 方法进行了一个小的比较,$array[] 似乎快得多。

<?php
$array
= array();
for (
$x = 1; $x <= 100000; $x++)
{
$array[] = $x;
}
?>
花费 0.0622200965881 秒



<?php
$array
= array();
for (
$x = 1; $x <= 100000; $x++)
{
array_push($array, $x);
}
?>
花费 1.63195490837 秒

因此,如果您不使用 array_push() 的返回值,最好使用 $array[] 方法。

希望这能帮到一些人。
mrgreen dot webpost at gmail dot com
8 年前
Rodrigo de Aquino 断言,与其使用 array_push 来追加到关联数组,不如直接做...

$data[$key] = $value;

...但这实际上是不正确的。与 array_push 甚至...

$data[] = $value;

...Rodrigo 的建议并不能保证将新元素追加到数组的末尾。例如...

$data['one'] = 1;
$data['two'] = 2;
$data['three'] = 3;
$data['four'] = 4;

...可能会得到一个看起来像这样的数组...

[ "four" => 4, "one" => 1, "three" => 3, "two" => 2 ]

我只能假设 PHP 在添加元素时对数组进行排序,以便它在稍后通过其键查找特定元素时更容易找到它。在很多情况下,如果数组在内部存储的顺序与您添加元素的顺序不同并不重要,但是,例如,如果您稍后对数组执行 foreach,则元素可能不会按照您需要的顺序进行处理。

如果您想将元素添加到关联数组的末尾,您应该使用一元数组联合运算符(+=)...

$data['one'] = 1;
$data += [ "two" => 2 ];
$data += [ "three" => 3 ];
$data += [ "four" => 4 ];

当然,您也可以一次追加多个元素...

$data['one'] = 1;
$data += [ "two" => 2, "three" => 3 ];
$data += [ "four" => 4 ];

请注意,与 array_push 一样(但与 $array[] = 不同),数组必须在使用一元联合之前存在,这意味着如果您在循环中构建数组,需要先声明一个空数组...

$data = [];
for ( $i = 1; $i < 5; $i++ ) {
$data += [ "element$i" => $i ];
}

...这将得到一个看起来像这样的数组...

[ "element1" => 1, "element2" => 2, "element3" => 3, "element4" => 4 ]
raat1979 at gmail dot com
8 年前
不幸的是,array_push 返回数组中新项目的数量
它不会返回您刚刚添加项目的键,在数字数组中,您可以使用 -1,但是您需要确保没有关联键存在,因为这会破坏该假设

如果 array_push 返回刚刚添加项目的键,那就更好了,就像下面的函数一样
(也许一个原生变体会是个好主意...)

<?php

if(!function_exists('array_add')){
function
array_add(array &$array,$value /*[, $...]*/){
$values = func_get_args(); //获取所有值
$values[0]= &$array; //引用!
$org=key($array); //我们现在在哪里?
call_user_func_array('array_push',$values);
end($array); //移动到最后一个项目
$key = key($array); //获取最后一个项目的键
if($org===null){
//在文件末尾,添加了一些内容,移动到那里
return $key;
}elseif(
$org<(count($array)/2)){ //在中间某个地方 +/- 都可以
reset($array);
while (
key($array) !== $org) next($List);
}else{
while (
key($array) !== $org) prev($List);
}
return
$key;
}
}
echo
"<pre>\n";
$pr = array('foo'=>'bar','bar'=>'foo');
echo
"Taken array;";
print_r($pr);

echo
"\npush 1 returns ".array_push($pr,1)."\n";
echo
"------------------------------------\n";
$pr = array('foo'=>'bar','bar'=>'foo');
echo
"\npush 2 returns ".array_push($pr,1,2)."\n";
echo
"------------------------------------\n";
$pr = array('foo'=>'bar','bar'=>'foo');
echo
"\n add 1 returns ".array_add($pr,2)."\n\n";
echo
"------------------------------------\n";
$pr = array('foo'=>'bar','bar'=>'foo');
echo
"\n add 2 returns ".array_add($pr,1,2)."\n\n";
echo
"<pre/>\n\n";
?>
输出
Taken array;Array
(
[foo] => bar
[bar] => foo
)

push 1 returns 3
------------------------------------

push 2 returns 4
------------------------------------

add 1 returns 0

------------------------------------

add 2 returns 1
willdemaine at gmail dot com
16 年前
如果您在一个循环中向数组添加多个值,使用 array_push 比我经常看到的重复 [] = 语句更快

<?php
class timer
{
private
$start;
private
$end;

public function
timer()
{
$this->start = microtime(true);
}

public function
Finish()
{
$this->end = microtime(true);
}

private function
GetStart()
{
if (isset(
$this->start))
return
$this->start;
else
return
false;
}

private function
GetEnd()
{
if (isset(
$this->end))
return
$this->end;
else
return
false;
}

public function
GetDiff()
{
return
$this->GetEnd() - $this->GetStart();
}

public function
Reset()
{
$this->start = microtime(true);
}

}

echo
"向数组添加 100k 个元素,使用 []\n\n";
$ta = array();
$test = new Timer();
for (
$i = 0; $i < 100000; $i++)
{
$ta[] = $i;
}
$test->Finish();
echo
$test->GetDiff();

echo
"\n\n向数组添加 100k 个元素,使用 array_push\n\n";
$test->Reset();
for (
$i = 0; $i < 100000; $i++)
{
array_push($ta,$i);
}
$test->Finish();
echo
$test->GetDiff();

echo
"\n\n向数组添加 100k 个元素,使用 [],每次 10 个\n\n";
$test->Reset();
for (
$i = 0; $i < 10000; $i++)
{
$ta[] = $i;
$ta[] = $i;
$ta[] = $i;
$ta[] = $i;
$ta[] = $i;
$ta[] = $i;
$ta[] = $i;
$ta[] = $i;
$ta[] = $i;
$ta[] = $i;
}
$test->Finish();
echo
$test->GetDiff();

echo
"\n\n向数组添加 100k 个元素,使用 array_push,每次 10 个\n\n";
$test->Reset();
for (
$i = 0; $i < 10000; $i++)
{
array_push($ta,$i,$i,$i,$i,$i,$i,$i,$i,$i,$i);
}
$test->Finish();
echo
$test->GetDiff();
?>

输出

$ php5 arraypush.php
X-Powered-By: PHP/5.2.5
Content-type: text/html

向数组添加 100k 个元素,使用 []

0.044686794281006

向数组添加 100k 个元素,使用 array_push

0.072616100311279

向数组添加 100k 个元素,使用 [],每次 10 个

0.034690141677856

向数组添加 100k 个元素,使用 array_push,每次 10 个

0.023932933807373
yhusky at qq dot com
6 年前
egingell at sisna dot com 12 年前做的笔记中有一个错误。二维数组将输出“d,e,f”,而不是“a,b,c”。

<?php
$stack
= array('a', 'b', 'c');
array_push($stack, array('d', 'e', 'f'));
print_r($stack);
?>

上面的代码会输出:
Array (
[0] => a
[1] => b
[2] => c
[3] => Array (
[0] => d
[1] => e
[2] => f
)
)
egingell at sisna dot com
18 年前
如果你将一个数组推入栈中,PHP 会将整个数组添加到下一个元素中,而不是将键值对添加到数组中。如果你不想要这种行为,最好使用 array_merge() 或遍历你想要推入的数组,并使用 $stack[$key] = $value 添加每个元素。

<?php

$stack
= array('a', 'b', 'c');
array_push($stack, array('d', 'e', 'f'));
print_r($stack);

?>
上面的代码会输出:
Array (
[0] => a
[1] => b
[2] => c
[3] => Array (
[0] => a
[1] => b
[2] => c
)
)
P.A.Semi
5 年前
PHP 5.4 中引入了推入数组引用的问题 - 是不是有人决定它不再需要了?

在 PHP 5.3 中,可以使用以下代码:

$A=array(); array_push($A,1); $c=2; array_push($A,&$c); print_r($A); $c=3; print_r($A);

正确输出:

Array ( [0] => 1 [1] => 2 )
Array ( [0] => 1 [1] => 3 )

将引用视为其他语言中的指针...
例如,此函数可用于推入 MySQL 查询的参数

$params=array(); array_push($params,&$field1); array_push($params,&$field2); array_unshift($params,'ss');
call_user_func_array(array($Query,'bind_param'),$params);

这段代码在 PHP 5.4 中会导致致命错误,并且根据服务器配置,它甚至可能不会报告错误原因...

解决此问题的变通方案是:

$A=array(); $A[]=1; $c=2; $A[]=&$c; print_r($A); $c=3; print_r($A);

$params=array(); $params[]=&$field1; $params[]=&$field2; array_unshift($params,'ss');
call_user_func_array(array($Query,'bind_param'),$params);

(在实际代码中,字段是动态指定的,并在 for 循环中进行迭代...)

这在 PHP 5.3 和 PHP 5.6 中都似乎有效...
Carlos Alberto B. Carucce
5 年前
这是我将一个数组的所有元素添加到另一个数组的方法

<?php
$oneArray
= ['d', 'e', 'f'];
$anotherArray = ['a', 'b', 'c'];

array_push($anotherArray, ...$oneArray);
//['a', 'b', 'c', 'd', 'e', 'f'];
aosojnik at gmail dot com
14 年前
如果你想保留数组中的键,可以使用以下代码:

<?php
function array_pshift(&$array) {
$keys = array_keys($array);
$key = array_shift($keys);
$element = $array[$key];
unset(
$array[$key]);
return
$element;
}
?>
helpmepro1 at gmail dot com
15 年前
优雅的 PHP 数组组合算法

<?

//作者:Shimon Dookin

function get_combinations(&$lists,&$result,$stack=array(),$pos=0)
{
$list=$lists[$pos];
if(is_array($list))
foreach($list as $word)
{
array_push($stack,$word);
if(count($lists)==count($stack))
$result[]=$stack;
else
get_combinations($lists,$result,$stack,$pos+1);
array_pop($stack);
}
}

$wordlists= array( array("shimon","doodkin") , array("php programmer","sql programmer","mql metatrader programmer") );

get_combinations($wordlists,$combinations);

echo '<xmp>';
print_r($combinations);

?>
aaron dot hawley at uvm dot edu
19 年前
Skylifter 在 2004 年 1 月 20 日的笔记中指出,[] 空括号符号不会像 array_push 那样返回数组计数。array_push 和推荐的空括号符号之间还存在另一个区别。

空括号不会像 array_push 那样首先检查变量是否为数组。如果 array_push 发现一个变量不是数组,它会在 E_ALL 错误报告开启的情况下打印一条警告消息。

因此,在 PHP 开发人员更改此行为之前,array_push 比 [] 更安全。
colecooper2005 at icloud dot com
7 年前
在开发 PocketMine 插件时,将内容添加到 YAML 表中的一种好方法是:

$table=$this->config->get("Table");
array_push($table, "New Value for table");
$this->config->set("Table", $table);
andrew at cgipro dot com
19 年前
需要一个真正的一行代码来将一个元素添加到一个新的数组名称中?

$emp_list_bic = $emp_list + array(c=>"ANY CLIENT");

上下文...
drewdeal: 这比 array_push() 更好、更简单
patelbhadresh: 太棒了!... 所以你发现了新想法...
drewdeal: 因为你不能这样做:$emp_list_bic = array_push($emp_list, c=>"ANY CLIENT");
drewdeal: array_push 返回一个计数并影响当前数组... 并且不支持设置键!
drewdeal: 是的。我的单行代码基于之前的数组创建一个新的数组
steve at webthoughts d\ot ca
18 年前
对 array_push_associative 函数的进一步修改
1. 删除了看似无用的 array_unshift 函数,该函数会生成 PHP 警告
2. 添加了对非数组参数的支持

<?
// 附加关联数组元素
function array_push_associative(&$arr) {
$args = func_get_args();
foreach ($args as $arg) {
if (is_array($arg)) {
foreach ($arg as $key => $value) {
$arr[$key] = $value;
$ret++;
}
}else{
$arr[$arg] = "";
}
}
return $ret;
}

$items = array("here" => "now");
$moreitems = array("this" => "that");

$theArray = array("where" => "do we go", "here" => "we are today");
echo array_push_associative($theArray, $items, $moreitems, "five") . ' is the size of $theArray.<br />';

echo "<pre>";
print_r($theArray);
echo "</pre>";

?>

产生

4 is the size of $theArray.
Array
(
[where] => do we go
[here] => now
[this] => that
[five] =>
)
gfuente at garrahan dot gov dot ar
7 年前
如果要推入数组末尾的元素是数组,则会收到以下错误消息:

Unknown Error, value: [8] Array to string conversion

我尝试了以下两种方法(都可以,但会显示警告消息):

$aRol = array( $row[0], $row[1], $row[2] );
$aRoles[] = $aRol;


array_push( $aRoles, $aRol);

正确的方法是

$cUnRol = implode("(",array( $row[0], $row[1], $row[2] ) );
array_push( $aRoles, $cUnRol );

谢谢。
flobee
10 年前
使用 $array "+=" array(1,2,3) 或联合运算符 (https://php.net/manual/en/language.operators.array.php) 时要小心

我认为它在过去有效,或者我测试得不够充分。:-/
(曾经有效,曾经 [] 比 array_push 快,过去 :-D )

php -r '$a = array(1,2); $a += array(3,4); print_r($a);'
Array (
[0] => 1
[1] => 2
)
php -r '$a = array(1,2); $b = array(3,4);$c = $a + $b; print_r($c);'
Array (
[0] => 1
[1] => 2
)
php -r '$a = array(1,2); $b = array(2=>3,3=>4);$c = $a + $b; print_r($c);'
Array (
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
David Spector
3 年前
使用 array_push 后,你可能希望在使用 array_pop 之前读取一次或多次顶层(最后一个)数组元素。为了高效地读取顶层数组元素,请使用 "current" 函数。
siqueiramoises14 at gmail dot com
4 年前
如果你需要将一个多维数字数组推入另一个数组,array_push 会将整个数组推入第一个数组的一个键中。例如,假设你有两个数组

<?php
$array1
= [
0 => [
"key1" => "value1",
"key2" => "value2"
]
];

$array2 = [
0 => [
"key1" => "value1",
"key2" => "value2"
]
];

$array1[] = $array2;

// 之后,array1 将会变成这样:

[
0 => [
"key1" => "value1",
"key2" => "value2"
],

1 => [
0 => [
"key1" => "value2",
"key2" => "value2"
]
]

// 如果你不希望发生这种情况,这里有一个函数可以避免这种情况:

function array_push_indexes($array1, $array2){
$lastKey = array_key_last($array1);
for(
$i = 0; $i < count($array2); $i++){
$KeyPosition = 1 + $i;
$array1[$lastKey+$KeyPosition] = $array2[$i];
}
return
$array1;
}

// 使用之前相同的例子,这个函数将返回:

[
0 => [
"key1" => "value1",
"key2" => "value2"
],

1 => [
"key1" => "value1",
"key2" => "value2"
]
]

?>

P.S: `array_key_last` 函数适用于 PHP >= 7.3.0,更多信息请查看这里:https://php.net/manual/en/function.array-key-last.php
wesleys at opperschaap dot net
15 年前
此函数模仿 Perl 中的 `push()` 函数,Perl 允许将一个数组推入另一个数组:`push(@array, @array2, @array3)`。此函数模拟了这种行为。

<?php

function array_push_array(&$arr) {
$args = func_get_args();
array_shift($args);

if (!
is_array($arr)) {
trigger_error(sprintf("%s: Cannot perform push on something that isn't an array!", __FUNCTION__), E_USER_WARNING);
return
false;
}

foreach(
$args as $v) {
if (
is_array($v)) {
if (
count($v) > 0) {
array_unshift($v, &$arr);
call_user_func_array('array_push', $v);
}
} else {
$arr[] = $v;
}
}
return
count($arr);
}

$arr = array(0);
$arr2 = array(6,7,8);
printf("%s\n", array_push_array($arr, array(),array(1,2,3,4,5), $arr2));
print_r($arr);

# 错误..
$arr = "test";
printf("%s\n", array_push_array($arr, array(),array(1,2,3,4,5), $arr2));

?>
bk at quicknet dot nl
18 年前
在数组中的特定索引或键之前或之后添加元素

<?php

/**
* @return array
* @param array $src
* @param array $in
* @param int|string $pos
*/
function array_push_before($src,$in,$pos){
if(
is_int($pos)) $R=array_merge(array_slice($src,0,$pos), $in, array_slice($src,$pos));
else{
foreach(
$src as $k=>$v){
if(
$k==$pos)$R=array_merge($R,$in);
$R[$k]=$v;
}
}return
$R;
}

/**
* @return array
* @param array $src
* @param array $in
* @param int|string $pos
*/
function array_push_after($src,$in,$pos){
if(
is_int($pos)) $R=array_merge(array_slice($src,0,$pos+1), $in, array_slice($src,$pos+1));
else{
foreach(
$src as $k=>$v){
$R[$k]=$v;
if(
$k==$pos)$R=array_merge($R,$in);
}
}return
$R;
}

// 例子:

$src=array("A","B","C");
$in=array("X","Y");

var_dump(array_push_before($src,$in,1));
/* array_push_before,无键数组
array(5) {
[0]=>
string(1) "A"
[1]=>
string(1) "X"
[2]=>
string(1) "Y"
[3]=>
string(1) "B"
[4]=>
string(1) "C"
}*/

var_dump(array_push_after($src,$in,1));
/* array_push_after,无键数组
array(5) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "X"
[3]=>
string(1) "Y"
[4]=>
string(1) "C"
}*/

$src=array('a'=>"A",'b'=>"B",'c'=>"C");
$in=array('x'=>"X",'y'=>"Y");

var_dump(array_push_before($src,$in,1));
/* array_push_before,有键数组,在索引之前插入
array(5) {
["a"]=>
string(1) "A"
["x"]=>
string(1) "X"
["y"]=>
string(1) "Y"
["b"]=>
string(1) "B"
["c"]=>
string(1) "C"
}*/

var_dump(array_push_before($src,$in,'b'));
/* array_push_before,有键数组,在键之前插入
array(5) {
["a"]=>
string(1) "A"
["x"]=>
string(1) "X"
["y"]=>
string(1) "Y"
["b"]=>
string(1) "B"
["c"]=>
string(1) "C"
}*/

var_dump(array_push_after($src,$in,1));
/* array_push_after,有键数组,在索引之后插入
array(5) {
["a"]=>
string(1) "A"
["b"]=>
string(1) "B"
["x"]=>
string(1) "X"
["y"]=>
string(1) "Y"
["c"]=>
string(1) "C"
}*/

var_dump(array_push_after($src,$in,'b'));
/* array_push_after,有键数组,在键之后插入
array(5) {
["a"]=>
string(1) "A"
["b"]=>
string(1) "B"
["x"]=>
string(1) "X"
["y"]=>
string(1) "Y"
["c"]=>
string(1) "C"
}*/

?>
Marc Bernet
18 年前
一个小型且基本的堆栈实现,不使用数组。

类节点
{
var $elem;
var $next;
}
类堆栈
{
var $next;
函数 pop()
{
$aux=$this->next->elem;
$this->next=$this->next->next;
return $aux;
}
函数 push($obj)
{
$nod=new node;
$nod->elem=$obj;
$nod->next=$this->next;
$this->next=$nod;
}
函数 stack()
{
$this->next=NULL;
}
}
golddragon007
9 年前
我做了一个性能检查,发现如果推送多个值,它比正常的 $array[] 版本的数组推送更快。

案例 1:$array[] = something;
案例 2:array_push($array, $value);
案例 3:array_push($array, $value1, $value2, $value3 [...]); $values 已定义
案例 4:array_push($array, $value1, $value2, $value3 [...]); $values 已定义,当 $array 不为空时
案例 5:案例 1 + 案例 3
案例 6:结果数组包含一些值(案例 4)
案例 7:结果数组包含与推送数组相同的值(案例 4)
-----------------------------------------------------------------------------------------------------------
~~~~~~~~~~~~ 案例 1 ~~~~~~~~~~~~
时间:0.0310 0.0300 0.0290 0.0340 0.0400 0.0440 0.0480 0.0550 0.0570 0.0570
最小值:0.0290
最大值:0.0570
平均值:0.0425
~~~~~~~~~~~~ 案例 2 ~~~~~~~~~~~~
时间:0.3890 0.3850 0.3770 0.4110 0.4020 0.3980 0.4020 0.4060 0.4130 0.4200
最小值:0.3770
最大值:0.4200
平均值:0.4003
~~~~~~~~~~~~ 案例 3 ~~~~~~~~~~~~
时间:0.0200 0.0220 0.0240 0.0340 0.0360 0.0410 0.0460 0.0500 0.0520 0.0520
最小值:0.0200
最大值:0.0520
平均值:0.0377
~~~~~~~~~~~~ 案例 4 ~~~~~~~~~~~~
时间:0.0200 0.0250 0.0230 0.0260 0.0330 0.0390 0.0460 0.0510 0.0520 0.0520
最小值:0.0200
最大值:0.0520
平均值:0.0367
~~~~~~~~~~~~ 案例 5 ~~~~~~~~~~~~
时间:0.0260 0.0250 0.0370 0.0360 0.0390 0.0440 0.0510 0.0520 0.0530 0.0560
最小值:0.0250
最大值:0.0560
平均值:0.0419
~~~~~~~~~~~~ 案例 6 ~~~~~~~~~~~~
时间:0.0340 0.0280 0.0370 0.0410 0.0450 0.0480 0.0560 0.0580 0.0580 0.0570
最小值:0.0280
最大值:0.0580
平均值:0.0462
~~~~~~~~~~~~ 案例 7 ~~~~~~~~~~~~
时间:0.0290 0.0270 0.0350 0.0410 0.0430 0.0470 0.0540 0.0540 0.0550 0.0550
最小值:0.0270
最大值:0.0550
平均值:0.044

测试代码
// 案例 1
$startTime = microtime(true);
$array = array();
for ($x = 1; $x <= 100000; $x++)
{
$array[] = $x;
}
$endTime = microtime(true);

// 案例 2
$startTime = microtime(true);
$array = array();
for ($x = 1; $x <= 100000; $x++)
{
array_push($array, $x);
}
$endTime = microtime(true);

// 案例 3
$result = array();
$array2 = array(&$result)+$array;
$startTime = microtime(true);
call_user_func_array("array_push", $array2);
$endTime = microtime(true);

// 案例 4
$result = array();
for ($x = 1; $x <= 100000; $x++)
{
$result[] = $x;
}
$array2 = array(&$result)+$array;
$startTime = microtime(true);
call_user_func_array("array_push", $array2);
$endTime = microtime(true);

// 案例 5
$result = array();
$startTime = microtime(true);
$array = array(&$result);
for ($x = 1; $x <= 100000; $x++)
{
$array[] = $x;
}
$endTime = microtime(true);

// 案例 6
$result = array(1,2,3,4,5,6);
$startTime = microtime(true);
$array = array(&$result);
for ($x = 1; $x <= 100000; $x++)
{
$array[] = $x;
}
$endTime = microtime(true);

// 案例 7
$result = array();
for ($x = 1; $x <= 100000; $x++)
{
$result[] = $x;
}
$startTime = microtime(true);
$array = array(&$result);
for ($x = 1; $x <= 100000; $x++)
{
$array[] = $x;
}
$endTime = microtime(true);
oneill at c dot dk
19 年前
要将值插入非关联数组,我发现这个简单的函数可以解决问题

函数 insert_in_array_pos($array, $pos, $value)
{
$result = array_merge(array_slice($array, 0 , $pos), array($value), array_slice($array, $pos));
return $result;
}

看起来比上面给出的迭代解决方案简单得多...
alexander dot williamson at gmail dot com
16 年前
这将有助于解决关联数组问题

$aValues[$key] = $value;

其中 $key 是一个唯一的标识符,$value 是要存储的值。由于 $key 使用字符串或数字,如果您已经有一个 $key 与现有 $key 的值相同,该元素将被覆盖。

例如。

$aValues["one"] = "value of one";
$aValues["two"] = "different value of two!";

给出
array([one] => "value of one", [two] => "value of two");

但在使用相同的键 (one) 时将被覆盖

$aValues["one"] = "value of one";
$aValues["one"] = "different value of two!";

将给出

array([one] => "different value of two!");

3686
zbde00 at hotmail dot com
17 年前
一个非常好的从数组中删除元素的函数
函数 array_del($str,&$array)
{
if (in_array($str,$array)==true)
{

foreach ($array as $key=>$value)
{
if ($value==$str) unset($array[$key]);
}
}
}
yuri
12 年前
如果您想将元素放入数组的特定位置,请尝试使用此函数。

<?php

function array_put_to_position(&$array, $object, $position, $name = null)
{
$count = 0;
$return = array();
foreach (
$array as $k => $v)
{
// 插入新对象
if ($count == $position)
{
if (!
$name) $name = $count;
$return[$name] = $object;
$inserted = true;
}
// 插入旧对象
$return[$k] = $v;
$count++;
}
if (!
$name) $name = $count;
if (!
$inserted) $return[$name];
$array = $return;
return
$array;
}
?>

示例

<?php
$a
= array(
'a' => 'A',
'b' => 'B',
'c' => 'C',
);

print_r($a);
array_put_to_position($a, 'G', 2, 'g');
print_r($a);

/*
Array
(
[a] => A
[b] => B
[c] => C
)
Array
(
[a] => A
[b] => B
[g] => G
[c] => C
)
*/
?>
john
18 年前
kamprettos 的关联数组推送的变体

// 附加关联数组元素
函数 associative_push($arr, $tmp) {
if (is_array($tmp)) {
foreach ($tmp as $key => $value) {
$arr[$key] = $value;
}
return $arr;
}
return false;
}

$theArray = array();
$theArray = associative_push($theArray, $items);
Phil Davies
19 年前
正如有人指出的那样,array_push() 函数返回数组的计数,而不是新元素的键。由于我需要的是后者函数,所以我写了这个非常简单的替换。

函数 array_push2(&$array,$object,$key=null){
$keys = array_keys($array);
rsort($keys);
$newkey = ($key==null)?$keys[0]+1:$key;
$array[$newkey] = $object;
return $newkey;
}
Chicna
12 年前
我发现了一种简单的方法来实现一个“array_push_array”函数,在我们需要使用 call_user_func_array() 时,没有引用问题,希望这有帮助

函数 array_push_array(array &$array)
{
$numArgs = func_num_args();
if(2 > $numArgs)
{
trigger_error(sprintf('%s: expects at least 2 parameters, %s given', __FUNCTION__, $numArgs), E_USER_WARNING);
return false;
}

$values = func_get_args();
array_shift($values);

foreach($values as $v)
{
if(is_array($v))
{
if(count($v) > 0)
{
foreach($v as $w)
{
$array[] = $w;
}
}
}
else
{
$array[] = $v;
}
}

return count($array);
}
kamprettos at yahoo dot com Teguh Iskanto
18 年前
寻找一种将数据推送到关联数组的方法,并感到沮丧地知道 array_push() 无法完成这项工作?

这是我的场景
-------------------
我需要将系统命令输出关联到像这样的关联数组中

[sge@digital_db work]$ /usr/local/apache/htdocs/work/qhost.sh -h t1 -F | awk '{if(NR>4) print $1}' | sed 's/hl://g'
arch=lx24-amd64
num_proc=2.000000
mem_total=3.808G
swap_total=3.907G
virtual_total=7.715G
load_avg=0.000000
load_short=0.000000
load_medium=0.000000
load_long=0.000000
mem_free=3.510G
swap_free=3.907G
virtual_free=7.417G
mem_used=305.242M
swap_used=0.000
virtual_used=305.242M
cpu=0.000000
np_load_avg=0.000000
np_load_short=0.000000
np_load_medium=0.000000
np_load_long=0.000000

我怎么做到的
<? php

# 进入系统命令输出
$assoc_cmd =`$work_dir/qhost.sh -h $host_resource -F | awk '{if(NR>4) print $1}'| sed 's/hl://g' ` ;

# 拆分 "\n" 字符
$assoc_row = explode("\n", chop($assoc_cmd));

# 获取索引行
$idx_row = count($assoc_row) - 1 ;

# 初始化关联数组
$host_res_array = array();

for ($i = 0 ; $i<= $idx_row ; $i++)
{
# 获取参数和值
list($host_param,$host_val) = explode("=",$assoc_row[$i]);

# 将数据填充/推送到关联数组
$host_res_array[$host_param]= $host_val ;
}

echo "<pre> 架构 : </pre>\n" ;
echo $host_res_array['arch'] ;
echo "<pre> 内存总量 : </pre>\n" ;
echo $host_res_array['mem_tot'];

?>

希望这有帮助!:)
rarioj at gmail dot com
14 年前
此函数“返回数组中新元素的数量”。

要找出最后一个索引,请使用

<?php
$count
= array_push($array, $value);
$last_index = array_pop(array_keys($array));
?>
David Spector
3 年前
将值推入堆栈时的常见操作是访问堆栈顶部的值。

这可以使用“end”函数轻松完成

<?php
$top
=end($stack);
?>

注意:有关其对很少使用的内部数组指针的副作用的详细信息,请参阅“end”函数。
ciprian dot amariei at gmail com
18 年前
关于 O'Neill 将值插入非关联数组的解决方案的速度,我已经进行了一些测试,发现如果您有一个小的数组和更多的插入,它表现良好,但是对于一个巨大的数组和很少的插入,我建议使用以下函数

function array_insert( &$array, $index, $value ) {
$cnt = count($array);

for( $i = $cnt-1; $i >= $index; --$i ) {
$array[ $i + 1 ] = $array[ $i ];
}
$array[$index] = $value;
}

或者,如果您是一个速度上瘾的程序员(相同情况:大数组,很少的插入)使用这个

array_splice ( $array, $offset, 0, $item );

item 也可以是一个值数组;)。
asma dot gi dot 14 at gmail dot com
2 年前
只能通过引用传递变量
$arr = [1,2,3];
array_push(['a','b'],$arr) ; // 错误
array_push($arr,[1,2,3]) ; // 正确
bart at framers dot nl
22 年前
Array_push 也适用于多维数组。只需确保元素首先被定义为一个数组。

<?php
$array
["element"][$element]["element"] = array();
array_push ($array["element"][$element]["element"], "banana");
?>
To Top