数组

  • 介绍
  • 预定义常量
  • 排序数组
  • 数组函数
    • array — 创建数组
    • array_change_key_case — 更改数组中所有键的大小写
    • array_chunk — 将数组分割成块
    • array_column — 返回输入数组中单个列的值
    • array_combine — 使用一个数组作为键,另一个数组作为值创建数组
    • array_count_values — 统计数组中每个不同值的出现次数
    • array_diff — 计算数组的差集
    • array_diff_assoc — 计算数组的差集,并进行附加的索引检查
    • array_diff_key — 使用键进行比较,计算数组的差集
    • array_diff_uassoc — 计算数组的差集,并进行附加的索引检查,该检查由用户提供的回调函数执行
    • array_diff_ukey — 使用回调函数对键进行比较,计算数组的差集
    • array_fill — 用值填充数组
    • array_fill_keys — 用值填充数组,指定键
    • array_filter — 使用回调函数过滤数组元素
    • array_flip — 交换数组中所有键与其关联的值
    • array_intersect — 计算数组的交集
    • array_intersect_assoc — 计算数组的交集,并进行附加的索引检查
    • array_intersect_key — 使用键进行比较,计算数组的交集
    • array_intersect_uassoc — 计算数组的交集,并进行附加的索引检查,通过回调函数比较索引
    • array_intersect_ukey — 使用回调函数对键进行比较,计算数组的交集
    • array_is_list — 检查给定数组是否为列表
    • array_key_exists — 检查给定的键或索引是否存在于数组中
    • array_key_first — 获取数组的第一个键
    • array_key_last — 获取数组的最后一个键
    • array_keys — 返回数组的所有键或键的子集
    • array_map — 将回调函数应用于给定数组的元素
    • array_merge — 合并一个或多个数组
    • array_merge_recursive — 递归合并一个或多个数组
    • array_multisort — 对多个或多维数组进行排序
    • array_pad — 用值填充数组到指定长度
    • array_pop — 从数组末尾弹出元素
    • array_product — 计算数组中值的乘积
    • array_push — 将一个或多个元素推送到数组末尾
    • array_rand — 从数组中随机选取一个或多个键
    • array_reduce — 使用回调函数迭代地将数组缩减为单个值
    • array_replace — 将来自传递的数组的元素替换到第一个数组中
    • array_replace_recursive — 递归将来自传递的数组的元素替换到第一个数组中
    • array_reverse — 返回一个元素顺序反转的数组
    • array_search — 在数组中搜索给定值,如果成功,则返回第一个对应的键
    • array_shift — 从数组开头移出元素
    • array_slice — 从数组中提取切片
    • array_splice — 删除数组的一部分,并用其他东西替换它
    • array_sum — 计算数组中值的总和
    • array_udiff — 使用回调函数进行数据比较,计算数组的差集
    • array_udiff_assoc — 计算数组的差集,并进行附加的索引检查,通过回调函数比较数据
    • array_udiff_uassoc — 计算数组的差集,并进行附加的索引检查,通过回调函数比较数据和索引
    • array_uintersect — 使用回调函数进行数据比较,计算数组的交集
    • array_uintersect_assoc — 计算数组的交集,并进行附加的索引检查,通过回调函数比较数据
    • array_uintersect_uassoc — 计算数组的交集,并进行附加的索引检查,通过单独的回调函数比较数据和索引
    • array_unique — 从数组中删除重复值
    • array_unshift — 将一个或多个元素添加到数组的开头
    • array_values — 返回数组的所有值
    • array_walk — 将用户提供的函数应用于数组的每个成员
    • array_walk_recursive — 递归地将用户函数应用于数组的每个成员
    • arsort — 按降序对数组进行排序,并保持索引关联
    • asort — 按升序对数组进行排序,并保持索引关联
    • compact — 创建包含变量及其值的数组
    • count — 统计数组或 Countable 对象中的所有元素
    • current — 返回数组中的当前元素
    • each — 返回数组中的当前键值对,并前进数组游标
    • end — 将数组的内部指针设置为最后一个元素
    • extract — 从数组导入变量到当前符号表
    • in_array — 检查数组中是否存在某个值
    • key — 从数组中获取一个键
    • key_exists — array_key_exists 的别名
    • krsort — 按降序对数组进行键排序
    • ksort — 按升序对数组进行键排序
    • list — 将变量分配为数组
    • natcasesort — 使用不区分大小写的“自然顺序”算法对数组进行排序
    • natsort — 使用“自然顺序”算法对数组进行排序
    • next — 前进数组的内部指针
    • pos — current 的别名
    • prev — 回到数组的内部指针
    • range — 创建一个包含一系列元素的数组
    • reset — 将数组的内部指针设置为第一个元素
    • rsort — 按降序对数组进行排序
    • shuffle — 打乱数组
    • sizeof — count 的别名
    • sort — 按升序对数组进行排序
    • uasort — 使用用户定义的比较函数对数组进行排序,并保持索引关联
    • uksort — 使用用户定义的比较函数对数组进行键排序
    • usort — 使用用户定义的比较函数对数组进行值排序
添加注释

用户贡献的注释 17 个注释

applegrew at rediffmail dot com
16 年前
对于像我这样的新手。

创建新数组:-
// 创建一个空数组。
$theVariable = array();

// 创建一个包含元素的数组。
$theVariable = array("A", "B", "C");

// 创建关联数组。
$theVariable = array(1 => "http//google.com", 2=> "http://yahoo.com");

// 创建具有命名键的关联数组
$theVariable = array("google" => "http//google.com", "yahoo"=> "http://yahoo.com");

注意
可以像下面这样向数组添加新值。
$theVariable[] = "D";
$theVariable[] = "E";
Tyler Bannister
15 年前
要删除单个数组元素,请使用 unset 函数

例如

<?PHP
$arr
= array( "A", "B", "C" );
unset(
$arr[1] );
// 现在 $arr = array( "A", "C" );
?>

Unlink 用于删除文件。
macnimble at gmail dot com
15 年前
将线性数组(如 MySQL 记录集)转换为树或多维数组可能很麻烦。利用 PHP 中的引用,我们可以使用一个循环在一遍中“堆叠”数组,如下所示

<?php
# array_stack()
# 原始思路来自:
# http://www.ideashower.com/our_solutions/
# create-a-parent-child-array-structure-in-one-pass/
function array_stack (&$a, $p = '@parent', $c = '@children')
{
$l = $t = array();
foreach (
$a AS $key => $val):
if (!
$val[$p]) $t[$key] =& $l[$key];
else
$l[$val[$p]][$c][$key] =& $l[$key];
$l[$key] = (array)$l[$key] + $val;
endforeach;
return
$a = array('tree' => $t, 'leaf' => $l);
}

# 例如:
$node = array();
$node[1] = array('@parent' => 0, 'title' => '我是节点 1。');
# ^-----------------------v 将 @parent 值链接到键。
$node[2] = array('@parent' => 1, 'title' => '我是节点 2。');
$node[3] = array('@parent' => 2, 'title' => '我是节点 3。');
$node[4] = array('@parent' => 1, 'title' => '我是节点 4。');
$node[5] = array('@parent' => 4, 'title' => '我是节点 5。');

array_stack($node);

$node['leaf'][1]['title'] = '我是节点一。';
$node['leaf'][2]['title'] = '我是节点二。';
$node['leaf'][3]['title'] = '我是节点三。';
$node['leaf'][4]['title'] = '我是节点四。';
$node['leaf'][5]['title'] = '我是节点五。';

echo
'<pre>',print_r($node['tree'],TRUE),'</pre>';
?>

请注意,数组值没有参数检查,但这只是为了保持函数大小较小。可以轻松地在其中快速检查以确保 $a 参数实际上是一个数组。

希望您发现它有用。衷心感谢 IdeaShower.com 的 Nate Weiner 提供了原始函数,我基于它进行了构建。
webmaster at infoproducts dot x10hosting dot com
15 年前
也可以像下面这样将新值添加到数组中。
$theVariable["google"] = "http//google.com";

$theVariable["1"] = "http//google.com";
dragos dot rusu at NOSPAM dot bytex dot ro
14 年前
如果数组项以 NULL 作为键声明,则数组键将自动转换为空字符串 '',如下所示

<?php
$a
= array(
NULL => 'zero',
1 => 'one',
2 => 'two');

// 这将显示与“zero”值关联的键为空字符串
var_dump(array_keys($a));

// 显示数组元素
reset($a);
while(
key($a) !== NULL )
{
echo
key($a) . ": ".current($a) . "<br>";// PHP_EOL
next($a);
}

// 不显示数组元素
reset($a);
while(
key($a) != NULL ) // '' == null => 不会执行迭代
{
echo
key($a) . ": ".current($a) . "<br>";// PHP_EOL
next($a);
}
andyd273 at gmail dot com
15 年前
对 Endel Dreyer 的 PHP 数组到 JavaScript 数组函数进行了一个小小的修正。我只是将其更改为正确显示键。

function array2js($array,$show_keys)
{
$dimensoes = array();
$valores = array();

$total = count ($array)-1;
$i=0;
foreach($array as $key=>$value){
if (is_array($value)) {
$dimensoes[$i] = array2js($value,$show_keys);
if ($show_keys) $dimensoes[$i] = '"'.$key.'":'.$dimensoes[$i];
} else {
$dimensoes[$i] = '"'.addslashes($value).'"';
if ($show_keys) $dimensoes[$i] = '"'.$key.'":'.$dimensoes[$i];
}
if ($i==0) $dimensoes[$i] = '{'.$dimensoes[$i];
if ($i==$total) $dimensoes[$i].= '}';
$i++;
}
return implode(',',$dimensoes);
}
sunear at gmail dot com
15 年前
创建了此函数以删除数组中的元素;

<?php

function array_del_elm($input_array, $del_indexes) {
if (
is_array($del_indexes)) {
$indexes = $del_indexes;
} elseif(
is_string($del_indexes)) {
$indexes = explode($del_indexes, " ");
} elseif(
is_numeric($del_indexes)) {
$indexes[0] = (integer)$del_indexes;
} else return;
$del_indexes = null;

$cur_index = 0;
if (
sort($indexes)) for($i=0; $i<count($input_array); $i++) {
if (
$i == $indexes[$cur_index]) {
$cur_index++;
if (
$cur_index == count($indexes)) return $output_array;
continue;
}
$output_array[] = $input_array[$i];
}
return
$output_array;
}

?>

但我随后看到了 Tyler Bannister 和 Paul 的相同方法,发现他们的方法更快,但删除多个元素时存在缺陷,因此支持了几种参数传递方式。我将这两种方法组合成以下方法

<?php

function array_del_elm($target_array, $del_indexes) {
if (
is_array($del_indexes)) {
$indexes = $del_indexes;
} elseif(
is_string($del_indexes)) {
$indexes = explode($del_indexes, " ");
} elseif(
is_numeric($del_indexes)) {
$indexes[0] = (integer)$del_indexes;
} else return;
unset(
$del_indexes);

for(
$i=0; $i<count($indexes); $i++) {
unset(
$target_array[$indexes[$i]]);
}
return
$target_array;
}

?>

快速、兼容、功能性强;)
web at houhejie dot cn
6年前
string2array($str)

$arr=json_decode('["fileno",["uid","uname"],"topingid",["touid",[1,2,[3,4]],"touname"]]');
print_r($arr);

输出
Array ( [0] => fileno [1] => Array ( [0] => uid [1] => uname ) [2] => topingid [3] => Array ( [0] => touid [1] => Array ( [0] => 1 [1] => 2 [2] => Array ( [0] => 3 [1] => 4 ) ) [2] => touname ) )

我希望有一个函数string2array($str),“spam2”建议了这个。它运行良好~~~希望这对我们有帮助,并添加到数组函数列表中
justin at jmfrazier dot com
4年前
使用null作为键设置数组值与使用空数组[]并不相同。
<?php
$null
= null;
$testArray = [];
$testArray[$null] = 1;
$testArray[$null] = 2;
$testArray[$null] = 3;
$testArray[$null] = 4;
var_dump($testArray);
?>
输出
array(1) {
'' =>
int(4)
}

<?php
$testArray
= [];
$testArray[null] = 1;
$testArray[null] = 2;
$testArray[null] = 3;
$testArray[null] = 4;
var_dump($testArray);
?>
输出
array(1) {
'' =>
int(4)
}

<?php
$testArray
= [];
$testArray[] = 1;
$testArray[] = 2;
$testArray[] = 3;
$testArray[] = 4;
var_dump($testArray);
?>
输出
array(4) {
[0] =>
int(1)
[1] =>
int(2)
[2] =>
int(3)
[3] =>
int(4)
}
info at curtinsNOSPAMcreations dot com
13年前
创建多维数组的另一种更简洁的方法是使用json_decode。(请注意,这可能会增加一些开销,但看起来确实更漂亮。)当然,您可以根据需要在要解码的字符串中添加任意级别的层级和格式。不要忘记,json 需要用“而不是'来包围值!(因此,您不能用"将json字符串括起来并在字符串内部使用'。)

例如

<?php
$myarray
['blah'] = json_decode('[
{"label":"foo","name":"baz"},
{"label":"boop","name":"beep"}
]'
,true);

print_r($myarray)
?>
返回

Array
(
[blah] => Array
(
[0] => Array
(
[label] => foo
[name] => baz
)

[1] => Array
(
[label] => boop
[name] => beep
)
)
)
contact at greyphoenix dot biz
16 年前
<?php
// 创建多维数组

$theVariable = array("Search Engines" =>
array (
0=> "http//google.com",
1=> "http//yahoo.com",
2=> "http//msn.com/"),

"Social Networking Sites" =>
array (
0 => "http//www.facebook.com",
1 => "http//www.myspace.com",
2 => "http//vkontakte.ru",)
);

echo
"The first array value is " . $theVariable['Search Engines'][0];
?>

-- 输出 --
The first array value is http://google.com
Anonymous
15 年前
@jorge at andrade dot cl
这个版本更快
<?php
function array_avg($array,$precision=2){
if(!
is_array($array))
return
'ERROR in function array_avg(): this is a not array';

foreach(
$array as $value)
if(!
is_numeric($value))
return
'ERROR in function array_avg(): the array contains one or more non-numeric values';

$cuantos=count($array);
return
round(array_sum($array)/$cuantos,$precision);
}
?>
spereversev at envionsoftware dot com
12年前
<?php
function array_mask(array $array, array $keys) {
return
array_intersect_key( $array, array_fill_keys( $keys, 0 ) );
}
?>

可能对从关联数组中获取包含给定键的部分有用,例如,从$_REQUEST数组中

array_mask($_REQUEST, array('name', 'email'));
gratcypalma at gmail dot com
10年前
<?php
function foo() {
return array(
'name' => 'palma', 'old' => 23, 'language' => 'PHP');
}
/* 1. PHP < 5.4.0 */
$a = foo();
var_dump($a['name']);

/* 2. Works ini PHP >= 5.4.0 */

var_dump(foo()['name']);

/*
当我在PHP 5.3.8上运行第二种方法时,将显示错误消息“PHP致命错误:不能在写入上下文中使用方法返回值”

https://php.net/manual/en/migration54.new-features.php
*/
thomasdecaux at ebuildy dot com
15 年前
浏览简单数组

<?php

foreach ($myArray AS $myItem)
{

}

?>

浏览关联数组

<?php

foreach ($myArray AS $key=>$value)
{

}

?>

http://www.ebuildy.com
Jack A
15 年前
请注意,在类常量中不允许使用数组,尝试这样做会导致致命错误。
John Marc
14 年前
在向数字数组添加元素时要小心。
我想存储数据库中一些项目的一些信息,并决定使用记录 ID 作为键。

<?php
$key
=3000000000;
$DATA[$key]=true;
?>

这将创建一个包含 3000 万个元素的数组,并且很有可能,您将用这两行代码耗尽所有内存

<?php
$key
=3000000000;
$DATA["$key"]=true;
?>

另一方面,这将强制数组成为关联数组,并且只创建一个元素。
To Top