2024年PHP开发者大会日本站

数组

  • 简介
  • 预定义常量
  • 数组排序
  • 数组函数
    • array — 创建数组
    • array_all — 检查数组中所有元素是否都满足回调函数
    • array_any — 检查数组中至少一个元素是否满足回调函数
    • 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_find — 返回满足回调函数的第一个元素
    • array_find_key — 返回满足回调函数的第一个元素的键
    • 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 — 统计数组或可计数对象中的所有元素
    • 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 — 使用用户定义的比较函数按值对数组排序
添加注释

用户贡献的注释 10条注释

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' => 'I am node 1.');
# ^-----------------------v 将 @parent 值链接到键。
$node[2] = array('@parent' => 1, 'title' => 'I am node 2.');
$node[3] = array('@parent' => 2, 'title' => 'I am node 3.');
$node[4] = array('@parent' => 1, 'title' => 'I am node 4.');
$node[5] = array('@parent' => 4, 'title' => 'I am node 5.');

array_stack($node);

$node['leaf'][1]['title'] = 'I am node one.';
$node['leaf'][2]['title'] = 'I am node two.';
$node['leaf'][3]['title'] = 'I am node three.';
$node['leaf'][4]['title'] = 'I am node four.';
$node['leaf'][5]['title'] = 'I am node five.';

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

请注意,数组值没有参数检查,但这只是为了保持函数体积小巧。可以很容易地在其中快速检查以确保 $a 参数实际上是一个数组。

希望您觉得它有用。非常感谢 IdeaShower.com 的 Nate Weiner 提供了我所构建的原始函数。
webmaster at infoproducts dot x10hosting dot com
16年前
也可以像下面这样向数组中添加新值。
$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
14年前
创建多维数组的另一种更简洁的方法是使用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
)
)
)
To Top