|
compact
Create array containing variables and their values
(PHP 4, PHP 5)
compact() takes a variable number of parameters. Each parameter can be either a string containing the name of the variable, or an array of variable names. The array can contain other arrays of variable names inside it; compact() handles it recursively. For each of these, compact() looks for a variable with that name in the current symbol table and adds it to the output array such that the variable name becomes the key and the contents of the variable become the value for that key. In short, it does the opposite of extract(). It returns the output array with all the variables added to it. Any strings that are not set will simply be skipped.
Gotcha:
Because variable variables may not be used with PHP's Superglobal arrays within functions, the Superglobal arrays may not be passed into compact(). Example 298. compact() example<?php The above example will output: Array See also extract(). Code Examples / Notes » compactmijllirg
You might could think of it as ${$var}. So, if you variable is not accessible with the ${$var} it will not working with this function. Examples being inside of function or class where you variable is not present. <?php $foo = 'bar'; function blah() { // this will no work since the $foo is not in scope $somthin = compact('foo'); // you get empty array } ?> PS: Sorry for my poor english... pillepop2003
Use the following piece of code if you want to insert a value into an array at a path that is extracted from a string. Example: You have a syntax like 'a|b|c|d' which represents the array structure, and you want to insert a value X into the array at the position $array['a']['b']['c']['d'] = X. <? function array_path_insert(&$array, $path, $value) { $path_el = split('\|', $path); $arr_ref =& $array; for($i = 0; $i < sizeof($path_el); $i++) { $arr_ref =& $arr_ref[$path_el[$i]]; } $arr_ref = $value; } $array['a']['b']['f'] = 4; $path = 'a|b|d|e'; $value = 'hallo'; array_path_insert($array, $path, $value); /* var_dump($array) returns: array(1) { ["a"]=> &array(1) { ["b"]=> &array(2) { ["f"]=> int(4) ["d"]=> &array(1) { ["e"]=> string(5) "hallo" } } } */ ?> Rock on Philipp hericklr
The compact function doesn't work inside the classes or functions. I think its escope is local... Above it is a code to help about it. Comments & Suggestions are welcome. PS: Sorry for my poor english... <?php function x_compact() { if(func_num_args()==0) { return false; } $m=array(); function attach($val) { global $m; if((!is_numeric($val)) && array_key_exists($val,$GLOBALS)) { $m[$val]=$GLOBALS[$val];} } function sub($par) { global $m; if(is_array($par)) { foreach($par as $cel) { if(is_array($cel)) { sub($cel); } else { attach($cel); } } } else { attach($par); } return $m; } for($i=0;$i<func_num_args();$i++) { $arg=func_get_arg($i); sub($arg); } return sub($arg); } ?> rlynch
It should be noted that PHP will simply skip any strings that are not set: <?php $foo = 4; $bar = 3; $result = compact('foo', 'bar', 'baz'); ?> will result in: ('foo' => 4, 'bar' => 3) 'baz' is simply ignored. m spreij
Can also handy for debugging, to quickly show a bunch of variables and their values: <?php print_r(compact(explode(' ', 'count acw cols coldepth'))); ?> gives Array ( [count] => 70 [acw] => 9 [cols] => 7 [coldepth] => 10 ) |
Change Languagearray_change_key_case array_chunk array_combine array_count_values array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_diff array_fill_keys array_fill array_filter array_flip array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey array_intersect array_key_exists array_keys array_map array_merge_recursive array_merge array_multisort array_pad array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift array_slice array_splice array_sum array_udiff_assoc array_udiff_uassoc array_udiff array_uintersect_assoc array_uintersect_uassoc array_uintersect array_unique array_unshift array_values array_walk_recursive array_walk array arsort asort compact count current each end extract in_array key krsort ksort list natcasesort natsort next pos prev range reset rsort shuffle sizeof sort uasort uksort usort |