• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • array_fill()

    (PHP 4 >= 4.2.0, PHP 5, PHP 7)

    用给定的值填充数组

    说明

    array_fill(int $start_index,int $num,mixed $value): array

    array_fill()$value参数的值将一个数组填充$num个条目,键名由$start_index参数指定的开始。

    参数

    $start_index

    返回的数组的第一个索引值。

    如果$start_index是负数,那么返回的数组的第一个索引将会是$start_index,而后面索引则从0开始。(参见例子)。

    $num

    插入元素的数量。必须大于或等于 0。

    $value

    用来填充的值。

    返回值

    返回填充后的数组。

    错误/异常

    如果$num小于零,将会抛出E_WARNING

    更新日志

    版本说明
    5.6.0$num现在可以是零。之前$num必须大于零。

    范例

    Example #1array_fill()例子

    <?php
    $a = array_fill(5, 6, 'banana');
    $b = array_fill(-2, 4, 'pear');
    print_r($a);
    print_r($b);
    ?>
    

    以上例程会输出:

    Array
    (
        [5]  => banana
        [6]  => banana
        [7]  => banana
        [8]  => banana
        [9]  => banana
        [10] => banana
    )
    Array
    (
        [-2] => pear
        [0] => pear
        [1] => pear
        [2] => pear
    )
    

    注释

    参见手册上数组一节里关于负数的键的详细解释。

    参见

    This is what I recently did to quickly create a two dimensional array (10x10), initialized to 0:
    <?php
     $a = array_fill(0, 10, array_fill(0, 10, 0));
    ?>
    This should work for as many dimensions as you want, each time passing to array_fill() (as the 3rd argument) another array_fill() function.
    If you need negative indices:
    <?php
    $b = array_fill(-2, 4, 'pear');//this is not what we want
    $c = array_fill_keys(range(-2,1),'pear');//these are negative indices
    print_r($b);
    print_r($c);
    ?>
    Here is result of the code above:
    Array
    (
      [-2] => pear
      [0] => pear
      [1] => pear
      [2] => pear
    )
    Array
    (
      [-2] => pear
      [-1] => pear
      [0] => pear
      [1] => pear
    )
    Using objects with array_fill may cause unexpected results. Consider the following:
    <?php
    class Foo {
      public $bar = "banana";
    }
    //fill an array with objects
    $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"
     }
    } */
    //now we change the attribute of the object stored in index 0
    //this actually changes the attribute for EACH object in the ENTIRE array
    $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"
     }
    }
     */
    ?>
    Objects are filled in the array BY REFERENCE. They are not copied for each element in the array.
    I made this function named "array_getMax" that returns te maximum value and index, from array:
    <?php
    //using array_search_all by helenadeus at gmail dot com
    function array_search_all($needle, $haystack)
    {#array_search_match($needle, $haystack) returns all the keys of the values that match $needle in $haystack
      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 ){//returns full array when all values are the same.
        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);
      
      
    }
    //example 
     $arreglo=array('e1'=>99,'e2'=>'99','e3'=>1,'e4'=>1,'e5'=>98);
      
      var_dump(array_getMax($arreglo));
    //output
    /*
    array(2) {
     ["e1"]=>
     int(99)
     ["e2"]=>
     int(99)
    }
    */
    ?>
    I hope some one find this usefull
    Fill missing keys in a (numerically-indexed) array with a default value
    <?php
    function fill_missing_keys($array, $default = null, $atleast = 0)
    {
      return $array + array_fill(0, max($atleast, max(array_keys($array))), $default);
    }
    ?>
    
    array_fill() cannot be used to setup only missing keys in an array. This may be necessary for example before using implode() on a sparse filled array.
    The solution is to use this function:
    <?php
    function array_setkeys(&$array, $fill = NULL) {
     $indexmax = -1;
     for (end($array); $key = key($array); prev($array)) {
      if ($key > $indexmax)
       $indexmax = $key;
     }
     for ($i = 0; $i <= $indexmax; $i++) {
      if (!isset($array[$i]))
       $array[$i] = $fill;
     }
     ksort($array);
    }
    ?>
    This is usefull in some situations where you don't know which key index was filled and you want to preserve the association between a positioned field in an imploded array and the key index when exploding it.

    上篇:array_fill_keys()

    下篇:array_filter()