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!
配列 関数
参考
is_array(), explode(), implode(), split(), preg_split(), および join() も参照してください。
目次
- array_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 — current のエイリアス
- prev — 内部の配列ポインタをひとつ前に戻す
- range — ある範囲の整数を有する配列を作成する
- reset — 配列の内部ポインタを先頭の要素にセットする
- rsort — 配列を逆順にソートする
- shuffle — 配列をシャッフルする
- sizeof — count のエイリアス
- sort — 配列をソートする
- uasort — ユーザ定義の比較関数で配列をソートし、連想インデックスを保持する
- uksort — ユーザ定義の比較関数を用いて、キーで配列をソートする
- usort — ユーザー定義の比較関数を使用して、配列を値でソートする
配列 関数
renatonascto at gmail dot com
17-Sep-2008 08:11
17-Sep-2008 08:11
pragash_jey at yahoo dot com
06-Apr-2008 04:38
06-Apr-2008 04:38
Java Like Array Implementation!
<?php
/*
* Author : Pragash Jeyaratnam
* Vector Class
* PHP Version 5.2.5
* Contact : pragash_jey@yahoo.com.
*/
class Vector
{
/*
* The number of valid components in this Vector object.
*/
protected $elementCount;
/*
* The array buffer into which the components of the vector are stored.
*/
protected $elementData;
/**Default vector Constructor*/
function __construct()
{
$this->elementData = array();
$this->elementCount = count($this->elementData);
}
/**Append the parameter element to the vector*/
public function add($object)
{
if(!empty($object))
{
$this->elementData[] = $object;
$this->elementCount = count($this->elementData);
return true;
}
else
return false;
}
/*
* Returns true of Vector is empty false otherwise
*/
public function isEmpty()
{
return($this->elementCount==0);
}
/*
* Returns the current size of this Vector
*/
public function size()
{
return $this->elementCount;
}
/*
* Searches for the first occurence of the given argument
**/
public function indexOf($object)
{
if(($index =array_search($object,$this->elementData)) !==false)
return $index;
else
return -1;
}
/*
* This function will retain TRUE if $object is contained
* within the vector else FALSE
*/
public function contains($object)
{
return ($this->indexOf($object)>=0);
}
/*
* Returns Vector Object at index $index
* Error : Null is returned
*/
public function get($index)
{
if($this->checkBound($index))
{
return ($this->elementData[$index]);
}
return NULL;
}
/*
* Sets the object at $index to be $object
**/
public function set($index,$object)
{
if($this->checkBound($index))
{
$this->elementData[$index] =$object ;
return true;
}
return false;
}
/*
* Removes element at $index
**/
public function removeAt($index)
{
if ($this->checkBound($index))
{
for ($i = $index; $i != $this->elementCount - 1; $i++)
{
$this->elementData[$i] = $this->elementData[$i +1];
}
array_pop($this->elementData);
$this->elementCount = count($this->elementData);
return true;
}
else {
return false;
}
}
/**
* Removes all elements from the Vector. Note that this does not
* resize the internal data array.
*/
public function removeAll()
{
if($this->elementCount ==0)
return;
for($i=0;$i<$this->size();$i++)
{
$this->set($i,NULL);
}
}
/*
* This function checks whether index
* is within the array bound
**/
private function checkBound($index)
{
if($index > $this->elementCount-1 || $index < 0)
{
throw new Exception('Array Index Out Of Bound Exception');
return false;
}
return true;
}
/*
*Removes the first element from the Vector
*/
public function removeFirstElement()
{
if($this->elementCount==0)
{
throw new Exception('No Such Element');
}
$test =array_shift($this->elementData);
if(!empty($test))
$this->elementCount = count($this->elementData);
}
}
?>
Anonymous
29-Mar-2008 08:28
29-Mar-2008 08:28
This is the shorter way to flatten a array:
<?php
function array_flatten($a) {
foreach($a as $k=>$v) $a[$k]=(array)$v;
return call_user_func_array(array_merge,$a);
}
?>
bas at muer dot nl
17-Mar-2008 05:17
17-Mar-2008 05:17
I see a lot of people here writing complex functions to convert an array to a string, for use with Javascript or other things (possibly even databases, which would be bad).
For Javascript, the most efficient way would be JSON (http://www.php.net/json_encode). For normal use, serialize() (http://www.php.net/serialize) is your friend.
jake at blah dot inf
07-Mar-2008 03:03
07-Mar-2008 03:03
@margol:
<?php
$tuple_array = array(array('key1' => 'val1'), array('key2' => 'val2'));
list($key, $val) = each(array_pop($tuple_array));
?>
But, why not use a two element array instead of a single-element associative array?
<?php
$tuple_array = array(array('key1', 'val1'), array('key2','val2'));
list($key,$val) = array_pop($tuple_array);
?>
margol at beamartyr dot net
04-Mar-2008 10:45
04-Mar-2008 10:45
More intuitive tuple support would be nice :)
But for those scratching their heads, like I did, to extract a tuple from an array of tuples, do something like:
$tuple = array_pop($tuple_array);
$key = key($tuple);
$val = $tuple[$key];
yousefomar (a) yahoo dot com
28-Feb-2008 08:26
28-Feb-2008 08:26
Here is how you refresh the expiration time for multiple cookies:
// get the cookie names
$keys=array_keys($_COOKIE);
// loop through all the cookies and update the exp. time
for ($i=0; $i<count($_COOKIE);$i++)
setcookie( $keys[$i], $_COOKIE[$keys[$i]], time()+3600);
you can use this in authentication validate file to keep the session up.
ms419 at freezone dot co dot uk
14-Feb-2008 07:35
14-Feb-2008 07:35
This function takes an array, a key and a value. If the key is not an array, it acts just like $array[$key] =& $value; If the key is an array, it recurses in the array, creating nested arrays as necessary.
Example:
$array = array('A' => array('B' => 'phi'));
$key = array('A', 'Z');
$value = 'gamma';
arraySet($array, $key, $value);
$array should now be:
array('A' => array('B' => 'phi', 'C' => 'gamma'));
This is useful for constructing nested arrays from sets of filesystem paths (e.g. 'A/B/C') or structured variable names (e.g. 'A.B.C' or 'A[B][C]')
Example:
arraySet($array, preg_split('/\//', $path, -1, PREG_SPLIT_NO_EMPTY), $value);
function arraySet(array &$array, $key, &$value)
{
if (is_array($key)) {
$keyComponent = array_shift($key);
if (empty($key)) {
$array[$keyComponent] =& $value;
return;
}
if (!is_array($array[$keyComponent])) {
$array[$keyComponent] = array();
}
PHP_CodeSniffer_arraySet($array[$keyComponent], $key, $value);
return;
}
$array[$key] =& $value;
}
dennis at DONTSPAMME dot born05 dot nl
13-Feb-2008 04:22
13-Feb-2008 04:22
I haven't completely figured out when or why an array gets referenced or copied, but it gave me quite the headache..
So i wrote a function which recursively copies an array while preserving keys and also clones objects if encountered
<?php
/**
* make a recursive copy of an array
*
* @param array $aSource
* @return array copy of source array
*/
function array_copy ($aSource) {
// check if input is really an array
if (!is_array($aSource)) {
throw new Exception("Input is not an Array");
}
// initialize return array
$aRetAr = array();
// get array keys
$aKeys = array_keys($aSource);
// get array values
$aVals = array_values($aSource);
// loop through array and assign keys+values to new return array
for ($x=0;$x<count($aKeys);$x++) {
// clone if object
if (is_object($aVals[$x])) {
$aRetAr[$aKeys[$x]]=clone $aVals[$x];
// recursively add array
} elseif (is_array($aVals[$x])) {
$aRetAr[$aKeys[$x]]=array_copy ($aVals[$x]);
// assign just a plain scalar value
} else {
$aRetAr[$aKeys[$x]]=$aVals[$x];
}
}
return $aRetAr;
}
?>
I hope i can save someone else's aspirine with this ;)
csorfab at gmail dot com
06-Feb-2008 07:26
06-Feb-2008 07:26
Here's a function I wrote to combine the values in an array in all different ways, and which returns a two-dimensional array as a byref result.
E.g.
if called:
comb(array(1, 2, 3), $r);
then $r would be:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
<?php
function comb($arr, &$rarr, $vtemp = array()){
foreach($arr as $key => $value){
$vtemp2 = $vtemp;
$vtemp2[] = $value;
$atemp = $arr;
unset($atemp[$key]);
if(count($atemp) > 0){
comb($atemp, $rarr, $vtemp2);
} else {
$t = array();
foreach($vtemp2 as $val){
$t[] = $val;
}
$rarr[] = $t;
}
}
}
?>
christian dot reinecke at web dot de
02-Feb-2008 10:12
02-Feb-2008 10:12
Here are two more functions handling string2array and access array by string. It's useful if you want to access an array in xpath-style, such as parse_ini_file return values with $process_sections = TRUE.
<?php
function createArrayByString($string, $separator, $value = NULL)
{
if (strlen($string) > 0) {
$splitter = explode($separator, $string);
$index = array_shift($splitter); // get first element
$function = __FUNCTION__;
return array($index => $function(implode($separator, $splitter), $separator, $value));
}
return $value;
}
function accessArrayByString($array, $string, $separator, $default = NULL)
{
if (!is_array($array)) {
return empty($string) ? $array : $default;
}
@list ($key, $rest) = explode($separator, $string, 2); // @ needed for last access
$function = __FUNCTION__;
return array_key_exists($key, $array)
? $function($array[$key], $rest, $separator, $default)
: $default;
}
$string = "one.two.three.four";
$separator = ".";
$array = createArrayByString($string, $separator, "standard value");
$return = accessArrayByString($array, $string, $separator, "element not found");
var_dump($array); // should return array("one" => array("two" => array("three" => array("four" => "standard value"))))
var_dump($return); // should return "standard value";
?>
change the function name to what ever you want, the recursive call uses __FUNCTION__ for re-call.
florian at egliselasauzaie dot fr
30-Jan-2008 11:09
30-Jan-2008 11:09
I've created a class which is comparable to a Vector in C++;
<?php
class Vector {
public $nb_elements;
public $liste;
public function Vector() {
$this->liste = array ();
$this->nb_elements = count($this->liste);
}
public function push_back($valeur) {
if (!empty ($valeur)) {
$this->liste[] = $valeur;
$this->nb_elements = count($this->liste);
return true;
} else {
return false;
}
}
public function insert_at($indice, $valeur) {
if ($indice > 0 && $indice < $this->nb_elements) {
for ($i = $this->nb_elements; $i != $indice; $i--) {
$this->liste[$i] = $this->liste[$i -1];
}
$this->liste[$indice] = $valeur;
$this->nb_elements = count($this->liste);
return true;
} else {
return false;
}
}
public function remove_at($indice) {
if ($indice > 0 && $indice < $this->nb_elements) {
for ($i = $indice; $i != $this->nb_elements - 1; $i++) {
$this->liste[$i] = $this->liste[$i +1];
}
array_pop($this->liste);
$this->nb_elements = count($this->liste);
return true;
} else {
return false;
}
}
public function pop() {
$value = array_pop($this->liste);
$this->nb_elements = count($this->liste);
return $value;
}
public function shift() {
$value = array_shift($this->liste);
$this->nb_elements = count($this->liste);
return true;
}
}
?>
really quick function
25-Jan-2008 09:37
25-Jan-2008 09:37
function array_flatten($a){ //flattens multi-dim arrays (distroys keys)
$ab = array(); if(!is_array($a)) return $ab;
foreach($a as $value){
if(is_array($value)){
$ab = array_merge($ab,array_flatten($value));
}else{
array_push($ab,$value);
}
}
return $ab;
}
Jck_true (leave out the '_' at gmail dot com)
25-Jan-2008 11:00
25-Jan-2008 11:00
A usefull function that returns a flat array.
I use it in a template system. Let the user pass a multidimensional array. Convert it using my function. Then use
<?php
$array = flatten($array,'','{$','}','->');
echo str_replace(array_keys($array),array_values($array),$template)
/**
* Flattens out an multidimension array
* Using the last parameters you can define the new key based on the old path.
* @param array $array A multidimension array
* @param string $prefix Internal perfix parameter - leave empty.
* @param string $start_string What string should start the final array key?
* @param string $end_string What string should end the final array key?
* @param string $seperator The string that should seperate the piecies in final array key path
* @return array Returns the flat array
*/
function flatten($array, $start_string= '{$',$end_string= '}',$seperator='->',$prefix="") {
$return = array();
foreach($array as $key=>$value) {
if (is_array($value)) {
$return = array_merge($return, Parser_method_replace::flatten($value, $prefix.$key.$seperator,$start_string,$end_string,$seperator));
} else
$return [$start_string.$prefix.$key.$end_string] = $value;
}
return $return;
}
}
?>
Example:
$template = 'My string with replacement {$test->subkey}';
{$test->subkey} will get replaced with $array['test']['subkey']
chaos dot global dot net at gmail dot com
03-Jan-2008 12:53
03-Jan-2008 12:53
if some one will need to convert array to php code use this function:
DEFINE('OFFSET_DELIMETER', "\t");
function array2php($array, $offset = OFFSET_DELIMETER) {
$text = '';
foreach($array as $k => $v) {
if (is_array($v)) {
$text .= "{$offset}'{$k}' => array(\n".array2php($v, $offset.OFFSET_DELIMETER)."$offset)";
} else {
$text .= "{$offset}'{$k}' => ".(is_string($v)? "'$v'": $v);
}
$text .= ",\n";
}
if ($len = strlen($text)) $text[$len - 2] = " ";
return $text;
}
Hayley Watson
17-Oct-2007 01:10
17-Oct-2007 01:10
Regarding cyberchrist at futura dot net's function. It makes an unnecessary array_merge(); the elements of $b that are merged with those of $a are immediately removed again by the array_diff(). The "limiting to known values" is entirely unnecessary, in other words: arrays already only contain "known values".
Also, the description and function only address the issue of whether $a is a subset of $b, not whether it is a proper subset. For $a to be a proper subset of $b, it must also be the case that $b is not a subset of $a.
Taking those points into account (and a personal aesthetic dislike of "if(test) return true; else return false;" gives:
<?php
function is_subset($a, $b)
{
return count(array_diff($a,$b))==0;
}
function is_proper_subset($a, $b)
{
return is_subset($a, $b) && !is_subset($b, $a);
}
?>
cyberchrist at futura dot net
15-Oct-2007 03:33
15-Oct-2007 03:33
Lately, dealing with databases, I've been finding myself needing to know if one array, $a, is a proper subset of $b.
Mathematically, this is asking (in set theory) [excuse the use of u and n instead of proper Unicode):
( A u B ) n ( ~ B )
What this does is it first limits to known values, then looks for anything outside of B but in the union of A and B (which would be those things in A which are not also in B).
If any value exists in this set, then A is NOT a proper subset of B, because a value exists in A but not in B. For A to be a proper subset, all values in A must be in B.
I'm sure this could easily be done any number of ways but this seems to work for me. It's not got a lot of error detection such as sterilizing inputs or checking input types.
// bool array_subset( array, array )
// Returns true if $a is a proper subset of $b, returns false otherwise.
function array_subset( $a, $b )
{
if( count( array_diff( array_merge($a,$b), $b)) == 0 )
return true;
else
return false;
}
Kazuyoshi Tlacaelel
30-Aug-2007 08:56
30-Aug-2007 08:56
<?php
/**
* converts a multidimensional array to a flat array
*
* trying to keep the original names of the keys
* if repeated keys are found a hash will be added to the
* keys trying to keep as much as possible of the original
* key context
*
* september 30 2007
*
* PHP version 5
*
* @license GPL
*
*/
$array = array ( 0 => array ( 0 => 1, 1 => 2, 2 => array ( 0 => 3, 1 => 4, 2 =>
array ( 0 => 5, 1 => 6, 2 => array ( 0 => 7, 1 => 8,),),), 3 => array (
0 => array ( 0 => 9, 1 => 10, 2 => array ( 0 => 11, 1 => 12,
2 => array ( 0 => 13, 1 => 14, 2 => array ( 0 => 15, 1 => 16,),),),),
1 => array ( 0 => 17, 1 => 18,),),), 1 => array ( 0 => 19, 1 => 20,),
2 => array ( 0 => array ( 0 => 21, 1 => 22, 2 => array ( 0 => 23, 1 => 24,
2 => array ( 0 => 25, 1 => 26, 2 => array ( 0 => 27, 1 => 28,),),),),
1 => array ( 0 => 29, 1 => 30,),),);
/**
* transforms a multidimensional array to a flat array
*
* the parameter is referenced
* so no returning value is needed
* @param array $array the multidimensional array to flat
* @return void
*/
function array_flatten(&$array)
{
function has_arrays($array)
{
foreach ($array as $item) {
if (is_array($item)) {
return true;
}
}
return false;
}
function copy_array(&$array, $array_key)
{
$array2 = $array[$array_key];
unset($array[$array_key]);
foreach ($array2 as $subkey => $subvalue) {
if (array_key_exists($subkey, $array)) {
$array[generate_unique_key($subkey)] = $subvalue;
} else {
$array[$subkey] = $subvalue;
}
}
}
function generate_unique_key($key)
{
if (strlen($key)>8) {
$key = $key[0] . $key[1] . $key[2];
}
$id = $key . '_';
$uid = uniqid();
$len = strlen($uid);
$max = (9 - strlen($key));
for ($c = $len; ; $c --) {
$id .= $uid[$c];
if ($c == ($len - $max)) {
break;
}
}
return $id;
}
function get_array_indexes($array)
{
$ret_array = array();
foreach ($array as $key => $value) {
if (is_array($value)) {
$ret_array[] = $key;
}
}
return $ret_array;
}
while(has_arrays($array)) {
foreach (get_array_indexes($array) as $key) {
copy_array($array, $key);
}
}
}
array_flatten($array);
array_multisort($array);
var_export($array);
/**
* OUTPUT
*
* array (
* 0 => 1,
* '1_403767b6' => 2,
* '0_793767b6' => 3,
* '1_8a3767b6' => 4,
* '0_454767b6' => 5,
* '1_564767b6' => 6,
* '0_035767b6' => 7,
* '1_345767b6' => 8,
* '0_e74767b6' => 9,
* '1_f84767b6' => 10,
* '0_855767b6' => 11,
* '1_a65767b6' => 12,
* '0_4e5767b6' => 13,
* '1_6f5767b6' => 14,
* '0_566767b6' => 15,
* '1_876767b6' => 16,
* '0_5b4767b6' => 17,
* '1_6c4767b6' => 18,
* '0_d43767b6' => 19,
* 1 => 20,
* '0_4e3767b6' => 21,
* '1_5f3767b6' => 22,
* '0_ad4767b6' => 23,
* '1_ce4767b6' => 24,
* '0_485767b6' => 25,
* '1_695767b6' => 26,
* '0_116767b6' => 27,
* '1_426767b6' => 28,
* '0_814767b6' => 29,
* '1_924767b6' => 30,
* )
*/
?>
mo dot longman at gmail dot com
31-Jul-2007 08:27
31-Jul-2007 08:27
to 2g4wx3:
i think better way for this is using JSON, if you have such module in your PHP. See json.org.
to convert JS array to JSON string: arr.toJSONString();
to convert JSON string to PHP array: json_decode($jsonString);
You can also stringify objects, numbers, etc.
g4wx3
19-Jul-2007 11:16
19-Jul-2007 11:16
I needed a function to convert a php array into a javascript array.
No problem i found it on "the net".
But the function i found wasn't good enough, instead of return a string with javascript-array it echoed directly everything.
I wanted to write the string to a file, when calling the function out of my function libary.
Secondly, there where minor "bugs" in the script, when you're original array contained characters like line breaks(\r\n,..), or quotes('), it would hack up the javascript array
Sow, i changed the function and fixed the bug.
<?php
//SUPER COOL : http://www.communitymx.com/content/article.cfm?page=3&cid=7CD16
//Checkout: REVERSE: http://www.hscripts.com/tutorials/php/jsArrayToPHP.php
//Convert a PHP array to a JavaScript one (rev. 4)
//Changlog by g4wx3: echo replaced by $output, added function output
function output($string) //make javascript ready
{
$string = str_replace( array( '\\' , '\'' ), array('\\\\', '\\\'') , $string); //-> for javascript array
$string = str_replace( array("\r\n", "\r", "\n") , '<br>' , $string); //nl2br
return $string;
}
function arrayToJS4($array, $baseName ) {
//Write out the initial array definition
//v4 echo ($baseName . " = new Array(); \r\n ");
$output = $baseName . " = new Array(); \r\n ";
//Reset the array loop pointer
reset ($array);
//Use list() and each() to loop over each key/value
//pair of the array
while (list($key, $value) = each($array)) {
if (is_numeric($key)) {
//A numeric key, so output as usual
$outKey = "[" . $key . "]";
} else {
//A string key, so output as a string
$outKey = "['" . $key . "']";
}
if (is_array($value)) {
//The value is another array, so simply call
//another instance of this function to handle it
$output .= arrayToJS4($value, $baseName . $outKey);
} else {
//Output the key declaration
//v4 echo ($baseName . $outKey . " = ");
$output .= $baseName . $outKey . " = ";
//Now output the value
if (is_string($value)) {
//Output as a string, as we did before
//v4 echo ("'" . output($value) . "'; \r\n ");
$output .= "'" . output($value) . "'; \r\n ";
} else if ($value === false) {
//Explicitly output false
//v4 echo ("false; \r\n");
$output .= "false; \r\n";
} else if ($value === NULL) {
//Explicitly output null
//v4 echo ("null; \r\n");
$output .= "null; \r\n";
} else if ($value === true) {
//Explicitly output true
//v4 echo ("true; \r\n");
$output .= "true; \r\n";
} else {
//Output the value directly otherwise
//v4 echo ($value . "; \r\n");
$output .= $value . "; \r\n";
}
}
}
return $output;
}
?>
You can use this for printing $_GET array, for example
peanutpad at msn dot com
16-Jun-2007 12:15
16-Jun-2007 12:15
heres a function from http://www.linksback.org Feedback welcome, of course! Public domain, yadda yadda.
function mySort(&$array,$key) {
if (!is_array($array) || count($array) == 0) return true;
$assocSortCompare = '$a = $a["'.$key.'"]; $b = $b["'.$key.'"];';
if (is_numeric($array[0][$key])) {
$assocSortCompare.= ' return ($a == $b) ? 0 : (($a < $b) ? -1 : 1);';
} else {
$assocSortCompare.= ' return strcmp($a,$b);';
}
$assocSortCompare = create_function('$a,$b',$assocSortCompare);
return usort($array,$assocSortCompare);
}
webdev at svbeatrix dot com
11-Jun-2007 06:06
11-Jun-2007 06:06
Bugs happen, but how can people post functions that WON'T EVEN COMPILE! I truly detest finding a cool code snippet or function and then having to debug them. Sorry for the rant, but I have experienced this scenario a number of times. TEST YOUR CODE, THEN POST!
Here is a revised and corrected previously posted function ArrayDepth, which had 3 bugs and yes, would not compile.
function ArrayDepth($Array,$DepthCount=-1) {
// Find maximum depth of an array
// Usage: int ArrayDepth( array $array )
// returns integer with max depth
// if Array is a string or an empty array it will return 0
$DepthArray=array(0);
$DepthCount++;
$Depth = 0;
if (is_array($Array))
foreach ($Array as $Key => $Value) {
$DepthArray[]=ArrayDepth($Value,$DepthCount);
}
else
return $DepthCount;
return max($DepthCount,max($DepthArray));
}
sid dot pasquale at gmail dot com
29-May-2007 11:57
29-May-2007 11:57
<?php
/* This function allow you to transform a multidimensional array
in a simple monodimensional array.
Usage: array_walk($oldarray, 'flatten_array', &$newarray);
For example, this code below shows to you:
Array
(
[1] => Array
(
[0] => 1
[1] => 2
)
[2] => Array
(
[0] => 3
[1] => 4
)
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
*/
function flatten_array($value, $key, &$array) {
if (!is_array($value))
array_push($array,$value);
else
array_walk($value, 'flatten_array', &$array);
}
$oldarray = array(
1 => array(1,2),
2 => array(3,4)
);
$newarray = array();
array_walk($oldarray, 'flatten_array', &$newarray);
echo "<pre>";
print_r($oldarray);
print_r($newarray);
echo "</pre>";
?>
info at dyflexis dot nl
17-Apr-2007 10:13
17-Apr-2007 10:13
A modernized version of the flatten_array() functies written by
davidj at boundlessgallery dot DISLIKESPAM dot com
on 02-Apr-2004 03:10
This function is able to work with associative arrays
<?php
function flatten_array($array) {
$size=sizeof($array);
$keys=array_keys($array);
for($x = 0; $x < $size; $x++) {
$element = $array[$keys[$x]];
if(is_array($element)) {
$results = flatten_array($element);
$sr = sizeof($results);
$sk=array_keys($results);
for($y = 0; $y < $sr; $y++) {
$flat_array[$sk[$y]] = $results[$sk[$y]];
}
} else {
$flat_array[$keys[$x]] = $element;
}
}
return $flat_array;
}
?>
info at joolee dot nl
19-Mar-2007 01:49
19-Mar-2007 01:49
A slight modification in the arraytostring function, posted below. This function lists an array the same way you would define it in PHP.
<?PHP
function arraytostring($array, $depth = 0)
{
if($depth > 0)
$tab = implode('', array_fill(0, $depth, "\t"));
$text.="array(\n";
$count=count($array);
foreach ($array as $key=>$value)
{
$x++;
if (is_array($value))
{
if(substr($text,-1,1)==')') $text .= ',';
$text.=$tab."\t".'"'.$key.'"'." => ".arraytostring($value, $depth+1);
continue;
}
$text.=$tab."\t"."\"$key\" => \"$value\"";
if ($count!=$x) $text.=",\n";
}
$text.="\n".$tab.")\n";
if(substr($text, -4, 4)=='),),')$text.='))';
return $text;
}
?>
Vladson
14-Mar-2007 04:18
14-Mar-2007 04:18
Hope someone find it useful..
<?php
/*
Function: eratosthenes
Usage: array eratosthenes ( int max_value )
Description:
Sieve of Eratosthenes is a simple, ancient algorithm
for finding all prime numbers up to a specified integer.
It was created by Eratosthenes, an ancient Greek mathematician.
*/
function eratosthenes($max) {
$sieve = array_fill(2, ($max-1), false);
while ($key = array_search(false, $sieve)) {
$sieve[$key] = true;
for ($i=$key*$key; $i<=$max; $i+=$key) {
if (array_key_exists($i, $sieve)) {
unset($sieve[$i]);
}
}
}
return array_keys($sieve);
}
?>
aflavio at gmail dot com
01-Mar-2007 08:29
01-Mar-2007 08:29
/**
* Remove a value from a array
* @param string $val
* @param array $arr
* @return array $array_remval
*/
function array_remval($val, &$arr)
{
$array_remval = $arr;
for($x=0;$x<count($array_remval)-1;$x++)
{
$i=array_search($val,$array_remval);
if($i===false)return false;
$array_remval=array_merge(array_slice($array_remval, 0,$i), array_slice($array_remval, $i+1));
}
return $array_remval;
}
$stack = array("orange", "banana", "apple", "raspberry", "apple");
output $stack = array("orange", "banana", "raspberry");
rune at zedeler dot dk
28-Feb-2007 05:42
28-Feb-2007 05:42
Notice that keys are considered equal if they are "=="-equal. That is:
<?
$a = array();
$a[1] = 'this is the first value';
$a[true] = 'this value overrides the first value';
$a['1'] = 'so does this one';
?>
Mark Lindeman
17-Jan-2007 11:10
17-Jan-2007 11:10
Very simple solution for changing the key of an associative array, of course it will fail in a lot of scenarios, but will do the trick in simple arrays:
<?php
function replace_key(&$input, $from_key, $to_key)
{
$input = unserialize(str_replace