这是我最近为快速创建二维数组(10x10)并初始化为 0 而做的事情
<?php
$a = array_fill(0, 10, array_fill(0, 10, 0));
?>
这应该适用于您想要的任意多个维度,每次将另一个 array_fill() 函数传递给 array_fill()(作为第 3 个参数)。
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
array_fill — 用值填充数组
用 value
参数的值填充一个数组,包含 count
个条目,键从 start_index
参数开始。
start_index
返回数组的第一个索引。
如果 start_index
为负数,则返回数组的第一个索引将为 start_index
,并且后续索引将从零开始(在 PHP 8.0.0 之前);从 PHP 8.0.0 开始,负键会正常递增(参见 示例)。
count
要插入的元素数量。必须大于或等于零,并且小于或等于 2147483647
。
value
用于填充的值
返回填充后的数组
如果 count
超出范围,则抛出 ValueError 异常。
版本 | 描述 |
---|---|
8.0.0 |
array_fill() 现在如果 count 超出范围则抛出 ValueError 异常;以前会引发 E_WARNING ,并且函数返回 false 。 |
示例 #1 array_fill() 示例
<?php
$a = array_fill(5, 6, 'banana');
print_r($a);
?>
以上示例将输出
Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana )
示例 #2 带有负起始索引的 array_fill() 示例
<?php
$a = array_fill(-2, 4, 'pear');
print_r($a);
?>
PHP 7 中以上示例的输出
Array ( [-2] => pear [0] => pear [1] => pear [2] => pear )
PHP 8 中以上示例的输出
Array ( [-2] => pear [-1] => pear [0] => pear [1] => pear )
请注意,在 PHP 8.0.0 之前,索引 -1
不存在。
有关负键的详细说明,请参阅手册中的 数组 部分。
这是我最近为快速创建二维数组(10x10)并初始化为 0 而做的事情
<?php
$a = array_fill(0, 10, array_fill(0, 10, 0));
?>
这应该适用于您想要的任意多个维度,每次将另一个 array_fill() 函数传递给 array_fill()(作为第 3 个参数)。
如果您需要负索引
<?php
$b = array_fill(-2, 4, 'pear');//这不是我们想要的
$c = array_fill_keys(range(-2,1),'pear');//这些是负索引
print_r($b);
print_r($c);
?>
以下是以上代码的结果
数组
(
[-2] => pear
[0] => pear
[1] => pear
[2] => pear
)
数组
(
[-2] => pear
[-1] => pear
[0] => pear
[1] => pear
)
使用对象与 array_fill 可能会导致意外结果。请考虑以下情况
<?php
class Foo {
public $bar = "banana";
}
//用对象填充数组
$array = array_fill(0, 2, new Foo());
var_dump($array);
/*
array(2) {
[0]=>
object(Foo)#1 (1) {
["bar"]=>
string(6) "banana"
}
[1]=>
object(Foo)#1 (1) {
["bar"]=>
string(6) "banana"
}
} */
//现在我们更改存储在索引 0 中的对象的属性
//这实际上会更改整个数组中每个对象的属性
$array[0]->bar = "apple";
var_dump($array);
/*
array(2) {
[0]=>
object(Foo)#1 (1) {
["bar"]=>
string(5) "apple"
}
[1]=>
object(Foo)#1 (1) {
["bar"]=>
string(5) "apple"
}
}
*/
?>
数组中的对象是通过引用填充的。它们不会为数组中的每个元素复制。
从 PHP 8.0 开始,示例代码
<?php
$b = array_fill(-2, 4, 'pear');
print_r($b);
?>
现在返回
数组
(
[-2] => pear
[-1] => pear
[0] => pear
[1] => pear
)
请参阅 https://wiki.php.net/rfc/negative_array_index 和 https://github.com/php/php-src/pull/3772
我创建了一个名为“array_getMax”的函数,它从数组中返回最大值和索引
<?php
// 使用 array_search_all 函数,作者 helenadeus,邮箱 helenadeus at gmail dot com
function array_search_all($needle, $haystack)
{// array_search_match($needle, $haystack) 返回在 $haystack 中与 $needle 匹配的所有值的键
foreach ($haystack as $k=>$v) {
if($haystack[$k]==$needle){
$array[] = $k;
}
}
return ($array);
}
function array_getMax($array){
$conteo=array_count_values($array);
if( count($conteo)==1 ){// 当所有值都相同时,返回完整数组。
return $array;
}
arsort($array);
//$antValue=null;
$maxValue=null;
$keyValue=null;
foreach($array as $key=>$value){
if($maxValue==null){
$maxValue=$value;
$keyValue=$key;
break;
}
}
$resultSearch=array_search_all($maxValue, $array);
return array_fill_keys($resultSearch, $maxValue);
}
// 示例
$arreglo=array('e1'=>99,'e2'=>'99','e3'=>1,'e4'=>1,'e5'=>98);
var_dump(array_getMax($arreglo));
// 输出
/*
array(2) {
["e1"]=>
int(99)
["e2"]=>
int(99)
}
*/
?>
我希望有人会发现这个有用
用默认值填充(按数字索引的)数组中缺失的键
<?php
function fill_missing_keys($array, $default = null, $atleast = 0)
{
return $array + array_fill(0, max($atleast, max(array_keys($array))), $default);
}
?>