Php заполнить массив ключами

PHP array_fill_keys() Function

This function returns an array of key-value pairs provided to the function as parameters.

Example 1: How to Use PHP array_fill_keys() function

 $keys = array("001","011","008","021"); $result = array_fill_keys($keys, "eleven"); print_r($result);
Array ( [001] => eleven [011] => eleven [008] => eleven [021] => eleven ) 

If an associative array is used as the second parameter of array_fill_keys, then the associative array will be appended to all the first array values.

Example 2

 $array1 = array( "a" => "ariana", "t" => "taylor", "s" => "selena", ); $array2 = array( "m" => "Michael", "e" => "Ed", "d" => "Drake"); print_r(array_fill_keys($array1, $array2)); 
Array ( [ariana] => Array ( [m] => Michael [e] => Ed [d] => Drake ) [taylor] => Array ( [m] => Michael [e] => Ed [d] => Drake ) [selena] => Array ( [m] => Michael [e] => Ed [d] => Drake ) )

That’s it for this tutorial.

Источник

array_fill_keys

Создаёт и заполняет массив значением параметра value , используя значения массива keys в качестве ключей.

Список параметров

Массив значений, которые будут использованы в качестве ключей. Некорректные ключи массива будут преобразованы в строку ( string ).

Возвращаемые значения

Возвращает заполненный массив

Примеры

Пример #1 Пример использования array_fill_keys()

$keys = array( ‘foo’ , 5 , 10 , ‘bar’ );
$a = array_fill_keys ( $keys , ‘banana’ );
print_r ( $a );
?>

Результат выполнения данного примера:

Array ( [foo] => banana [5] => banana [10] => banana [bar] => banana )

Смотрите также

  • array_fill() — Заполняет массив значениями
  • array_combine() — Создаёт новый массив, используя один массив в качестве ключей, а другой для его значений

User Contributed Notes 10 notes

var_dump ( array_fill_keys ( $a , «test» ));
?>

array(1) <
[1]=>
string(4) «test»
>

now string key «1» become an integer value 1, be careful.

If an associative array is used as the second parameter of array_fill_keys, then the associative array will be appended in all the values of the first array.
e.g.
$array1 = array(
«a» => «first» ,
«b» => «second» ,
«c» => «something» ,
«red»
);

$array2 = array(
«a» => «first» ,
«b» => «something» ,
«letsc»
);

print_r ( array_fill_keys ( $array1 , $array2 ));
?>

The output will be
Array(
[first] => Array(
[a] => first,
[b] => something,
[0] => letsc
),
[second] => Array(
[a] => first,
[b] => something,
[0] => letsc
),
[something] => Array(
[a] => first,
[b] => something,
[0] => letsc
),
[red] => Array(
[a] => first,
[b] => something,
[0] => letsc
)
)

Get an associative array of zeros for counting letter frequency

$ltrs = array_fill_keys ( range ( ‘a’ , ‘z’ ), 0 );

RE: bananasims at hotmail dot com

I also needed a work around to not having a new version of PHP and wanting my own keys. bananasims code doesn’t like having an array as the second parameter.

Here’s a slightly modified version than can handle 2 arrays as inputs:

//we want these values to be keys
$arr1 = (0 => «abc», 1 => «def»);
/we want these values to be values
$arr2 = (0 => 452, 1 => 128);

function array_fill_keys($keyArray, $valueArray) if(is_array($keyArray)) foreach($keyArray as $key => $value) $filledArray[$value] = $valueArray[$key];
>
>
return $filledArray;
>

see array_fill_keys are basically used to make a new array from a pre-existing array in a form that the value of the pre-existing array will now be the key of the new Array .And there value will be same That we had given in the 2nd parameter . Example Below—->>>

//pre existing array
$a = array( «a» , «b» , «c» , «d» , «e» );

//new array with a single same value

$newArray = array_fill_keys ( $a , «Testing» );

echo «

" ; 
print_r ( $newArray );
echo "

» ;
?>
output;
Array
(
[a] => Testing
[b] => Testing
[c] => Testing
[d] => Testing
[e] => Testing
)

Some of the versions do not have this function.
I try to write it myself.
You may refer to my script below

function array_fill_keys($array, $values) if(is_array($array)) foreach($array as $key => $value) $arraydisplay[$array[$key]] = $values;
>
>
return $arraydisplay;
>

This function does the same as:
$array = array_combine ( $keys , array_fill ( 0 , count ( $keys ), $value ));
?>

Scratchy’s version still doesn’t work like the definition describes. Here’s one that can take a mixed variable as the second parameter, defaulting to an empty string if it’s not specified. Don’t know if this is exactly how the function works in later versions but it’s at least a lot closer.

function array_fill_keys($target, $value = ») if(is_array($target)) foreach($target as $key => $val) $filledArray[$val] = is_array($value) ? $value[$key] : $value;
>
>
return $filledArray;
>

This works for either strings or numerics, so if we have

$arr1 = array(0 => ‘abc’, 1 => ‘def’);
$arr2 = array(0 => 452, 1 => 128);
$arr3 = array(0 => ‘foo’, 1 => ‘bar’);

array_fill_keys($arr1,$arr2)
returns: [abc] => 452, [def] => 128

array_fill_keys($arr1,0)
returns: [abc] => 0, [def] => 0

array_fill_keys($arr2,$arr3)
returns: [452] => foo, [128] => bar

array_fill_keys($arr3,’BLAH’)
returns: [foo] => BLAH, [bar] => BLAH

and array_fill_keys($arr1)
returns: [abc] =>, [def] =>

Источник

Смотрите также

A simple trick that can help you to guess what diff/intersect or sort function does by name.

[suffix] assoc — additional index check. Compares both value and index.

Example: array_diff_assoc, array_intersect_assoc.

[suffix] key — index only check. Ignores value of array, compares only indexes.

Example: array_diff_key, array_intersect_key.

[suffix] **empty** — no «key» or «assoc» word in suffix. Compares values only. Ignores indexes of array.

Example: array_diff, array_intersect.

[prefix] u — will do comparison with user defined function. Letter u can be used twice in some functions (like array_udiff_uassoc), this means that you have to use 2 functions (one for value, one for index).

Example: array_udiff_uassoc, array_uintersect_assoc.

This also works with array sort functions:

[prefix] a — associative. Will preserve keys. [prefix] k — key sort. Will sort array by keys. [prefix] r — reverse. Will sort array in reverse order. [prefix] u — sort by user defined function (same as for diff/intersect).

Big arrays use a lot of memory possibly resulting in memory limit errors. You can reduce memory usage on your script by destroying them as soon as you´re done with them. I was able to get over a few megabytes of memory by simply destroying some variables I didn´t use anymore.
You can view the memory usage/gain by using the funcion memory_get_usage(). Hope this helps!

I need to take an element from the Array and change its position within the Array by moving the rest of the elements as required.
This is the function that does it. The first parameter is the working Array. The second is the position of the element to move and the third is the position where to move the element.
The function returns the modified Array.
function array_move_elem ( $array , $from , $to ) if ( $from == $to ) < return $array ; >
$c = count ( $array );
if (( $c > $from ) and ( $c > $to )) if ( $from < $to ) $f = $array [ $from ];
for ( $i = $from ; $i < $to ; $i ++) $array [ $i ] = $array [ $i + 1 ];
>
$array [ $to ] = $f ;
> else $f = $array [ $from ];
for ( $i = $from ; $i > $to ; $i —) $array [ $i ] = $array [ $i — 1 ];
>
$array [ $to ] = $f ;
>

?>
Examples:
$array = array( ‘Cero’ , ‘Uno’ , ‘Dos’ , ‘Tres’ , ‘Cuatro’ , ‘Cinco’ , ‘Seis’ , ‘Siete’ , ‘Ocho’ , ‘Nueve’ , ‘Diez’ );
$array = array_move_elem ( $array , 3 , 5 ); // Move element in position 3 to position 5.
print_r ( $array );

$array = array_move_elem ( $array , 5 , 3 ); // Move element in position 5 to position 3, leaving array as it was. 😉
print_r ( $array );

?>
Return:
Array ( [ 0 ] => Cero [ 1 ] => Uno [ 2 ] => Dos [ 3 ] => Cuatro [ 4 ] => Cinco [ 5 ] => Tres [ 6 ] => Seis [ 7 ] => Siete [ 8 ] => Ocho [ 9 ] => Nueve [ 10 ] => Diez )
Array ( [ 0 ] => Cero [ 1 ] => Uno [ 2 ] => Dos [ 3 ] => Tres [ 4 ] => Cuatro [ 5 ] => Cinco [ 6 ] => Seis [ 7 ] => Siete [ 8 ] => Ocho [ 9 ] => Nueve [ 10 ] => Diez )
?>

Updated code of ‘indioeuropeo’ with option to input string-based keys.

FUNCTION:
function array_move_elem ( $array , $from , $to ) // return if non-numeric couldn’t be found or from=to
if(! is_numeric ( $from )) if( array_search ( $from , array_keys ( $array ))!== FALSE ) $from = array_search ( $from , array_keys ( $array ));
>else return $array ;
>
>
$array_numeric_keys = array();
foreach( $array as $k => $v ) $array_numeric_keys [] = $k ;
>
if ( $from == $to ) < return $array ; >
$c = count ( $array_numeric_keys );
if (( $c > $from ) and ( $c > $to )) if ( $from < $to ) $f = $array_numeric_keys [ $from ];
for ( $i = $from ; $i < $to ; $i ++) $array_numeric_keys [ $i ] = $array_numeric_keys [ $i + 1 ];
>
$array_numeric_keys [ $to ] = $f ;
> else $f = $array_numeric_keys [ $from ];
for ( $i = $from ; $i > $to ; $i —) $array_numeric_keys [ $i ] = $array_numeric_keys [ $i — 1 ];
>
$array_numeric_keys [ $to ] = $f ;
>

>
$array_new = array();
foreach( $array_numeric_keys as $v ) $array_new [ $v ] = $array [ $v ];
>
return $array_new ;
>
?>

Here is a function to find out the maximum depth of a multidimensional array.

// return depth of given array
// if Array is a string ArrayDepth() will return 0
// usage: int ArrayDepth(array Array)

function ArrayDepth ( $Array , $DepthCount =- 1 , $DepthArray =array()) $DepthCount ++;
if ( is_array ( $Array ))
foreach ( $Array as $Key => $Value )
$DepthArray []= ArrayDepth ( $Value , $DepthCount );
else
return $DepthCount ;
foreach( $DepthArray as $Value )
$Depth = $Value > $Depth ? $Value : $Depth ;
return $Depth ;
>
?>

While PHP has well over three-score array functions, array_rotate is strangely missing as of PHP 5.3. Searching online offered several solutions, but the ones I found have defects such as inefficiently looping through the array or ignoring keys.

The following array_rotate() function uses array_merge and array_shift to reliably rotate an array forwards or backwards, preserving keys. If you know you can trust your $array to be an array and $shift to be between 0 and the length of your array, you can skip the function definition and use just the return expression in your code.

function array_rotate ( $array , $shift ) if(! is_array ( $array ) || ! is_numeric ( $shift )) if(! is_array ( $array )) error_log ( __FUNCTION__ . ‘ expects first argument to be array; ‘ . gettype ( $array ). ‘ received.’ );
if(! is_numeric ( $shift )) error_log ( __FUNCTION__ . ‘ expects second argument to be numeric; ‘ . gettype ( $shift ). » ` $shift ` received.» );
return $array ;
>
$shift %= count ( $array ); //we won’t try to shift more than one array length
if( $shift < 0 ) $shift += count ( $array ); //handle negative shifts as positive
return array_merge ( array_slice ( $array , $shift , NULL , true ), array_slice ( $array , 0 , $shift , true ));
>
?>
A few simple tests:
$array =array( «foo» => 1 , «bar» => 2 , «baz» => 3 , 4 , 5 );

print_r ( array_rotate ( $array , 2 ));
print_r ( array_rotate ( $array , — 2 ));
print_r ( array_rotate ( $array , count ( $array )));
print_r ( array_rotate ( $array , «4» ));
print_r ( array_rotate ( $array , — 9 ));
?>

Short function for making a recursive array copy while cloning objects on the way.

function arrayCopy ( array $array ) $result = array();
foreach( $array as $key => $val ) if( is_array ( $val ) ) $result [ $key ] = arrayCopy ( $val );
> elseif ( is_object ( $val ) ) $result [ $key ] = clone $val ;
> else $result [ $key ] = $val ;
>
>
return $result ;
>
?>

/*to change an index without rewriting the whole table and leave at the same place.
*/
function change_index (& $tableau , $old_key , $new_key ) $changed = FALSE ;
$temp = 0 ;
foreach ( $tableau as $key => $value ) switch ( $changed ) case FALSE :
//creates the new key and deletes the old
if ( $key == $old_key ) $tableau [ $new_key ] = $tableau [ $old_key ];
unset( $tableau [ $old_key ]);
$changed = TRUE ;
>
break;

case TRUE :
//moves following keys
if ( $key != $new_key ) $temp = $tableau [ $key ];
unset( $tableau [ $key ]);
$tableau [ $key ] = $temp ;
break;
>
else < $changed = FALSE ;>//stop
>
>
array_values ( $tableau ); //free_memory
>

//Result :
$tableau = array( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 );
$res = print_r ( $tableau , TRUE );
$longueur = strlen ( $res ) — 1 ;
echo «Old array :\n» . substr ( $res , 8 , $longueur ) . «\n» ;

change_index ( $tableau , 2 , ‘number 2’ );
$res = print_r ( $tableau , TRUE );
$longueur = strlen ( $res ) — 10 ;
echo «New array :\n» . substr ( $res , 8 , $longueur ) . «\n» ;

Источник

Читайте также:  Пример 2
Оцените статью