文字

数组 函数

参见

参考 is_array() , explode() , implode() , split() , preg_split() , and unset() .

Table of Contents

  • array_change_key_case — 返回字符串键名全为小写或大写的数组
  • array_chunk — 将一个数组分割成多个
  • array_column — 返回数组中指定的一列
  • 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_replace_recursive — 使用传递的数组递归替换第一个数组的元素
  • array_replace — 使用传递的数组替换第一个数组的元素
  • 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_exists — 别名 array_key_exists
  • key — 从关联数组中取得键名
  • krsort — 对数组按照键名逆向排序
  • ksort — 对数组按照键名排序
  • list — 把数组中的值赋给一些变量
  • natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序
  • natsort — 用“自然排序”算法对数组排序
  • next — 将数组中的内部指针向前移动一位
  • pos — current 的别名
  • prev — 将数组的内部指针倒回一位
  • range — 建立一个包含指定范围单元的数组
  • reset — 将数组的内部指针指向第一个单元
  • rsort — 对数组逆向排序
  • shuffle — 将数组打乱
  • sizeof — count 的别名
  • sort — 对数组排序
  • uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
  • uksort — 使用用户自定义的比较函数对数组中的键名进行排序
  • usort — 使用用户自定义的比较函数对数组中的值进行排序

用户评论:

[#1] nicoolasens at gmail dot com [2015-11-06 10:15:29]


<?php
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(134,5678910);
$res print_r($tableauTRUE);
$longueur strlen($res) -1;
echo 
"Old array :\n" substr($res8$longueur) . "\n" ;

change_index ($tableau2'number 2');
$res print_r($tableauTRUE);
$longueur strlen($res) -10;
echo 
"New array :\n" substr($res8$longueur) . "\n" ;


?>

[#2] callmeanaguma at gmail dot com [2013-01-18 11:30:43]

If you need to flattern two-dismensional array with single values assoc subarrays, you could use this function:

<?php
function arrayFlatten($array) {
        
$flattern = array();
        foreach (
$array as $key => $value){
            
$new_key array_keys($value);
            
$flattern[] = $value[$new_key[0]];
        }
        return 
$flattern;
}
?>

[#3] kolkabes at googlemail dot com [2012-05-05 12:31:33]

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

<?php
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;
}
?>

[#4] dave at davidhbrown dot us [2011-09-24 11:57:00]

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.

<?php
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$shiftNULLtrue), array_slice($array0$shifttrue));
}
?>

A few simple tests:
<?php
$array
=array("foo"=>1,"bar"=>2,"baz"=>3,4,5);

print_r(array_rotate($array2));
print_r(array_rotate($array, -2));
print_r(array_rotate($arraycount($array)));
print_r(array_rotate($array"4"));
print_r(array_rotate($array, -9));
?>

[#5] oliverSPAMMENOT at e-geek dot com dot au [2010-03-22 19:28:18]

Function to pretty print arrays and objects. Detects object recursion and allows setting a maximum depth. Based on arraytostring and u_print_r from the print_r function notes. Should be called like so: 

<?php
egvaluetostring
($value)   //no max depth, or
egvaluetostring($value$max_depth)   //max depth set

function egvaluetostring($value$max_depth$key NULL$depth 0$refChain = array()) {
  if(
$depth 0)
    
$tab str_repeat("\t"$depth);
  
$text .= $tab . ($key !== NULL $key " => " "");
  
  if (
is_array($value) || is_object($value)) {
    
$recursion FALSE;
    if (
is_object($value)) {
      foreach (
$refChain as $refVal) {
        if (
$refVal === $value) {
          
$recursion TRUE;
          break;
        }
      }
      
array_push($refChain$value);
    }
    
    
$text .= (is_array($value) ? "array" "object") . " ( ";
    
    if (
$recursion) {
      
$text .= "*RECURSION* ";
    }
    elseif (isset(
$max_depth) && $depth >= $max_depth) {
      
$text .= "*MAX DEPTH REACHED* ";
    }
    else {
      if (!empty(
$value)) {
        
$text .= "\n";
        foreach (
$value as $child_key => $child_value) {
          
$text .= egvaluetostring($child_value$max_depth, (is_array($value) ? "[" "") . $child_key . (is_array($value) ? "]" ""), $depth+1$refChain) . ",\n";
        }
        
$text .= "\n" $tab;
      }
    }
    
    
$text .= ")";
    
    if (
is_object($value)) {
      
array_pop($refChain);
    }
  }
  else {
    
$text .= "$value";
  }

  return 
$text;
}
?>

[#6] seva dot lapsha at gmail dot com [2009-08-02 18:22:45]

Arrays are good, but inapplicable when dealing with huge amounts of data.

I'm working on rewriting some array functions to operate with plain Iterators - map, reduce, walk, flip et cetera are already there.

In addition I'm going to implement simulation of comprehensions (generators) in PHP (http://en.wikipedia.org/wiki/List_comprehension).

See the source code, examples and documentation at http://code.google.com/p/php-iterator-utils/

[#7] renatonascto at gmail dot com [2008-09-17 11:11:09]

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!

[#8] Jck_true (leave out the &#39;_&#39; at gmail dot com) [2008-01-25 02:00:08]

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)

function flatten($array$start_string'{$',$end_string'}',$seperator='->',$prefix="") {
  
$return = array();
  foreach(
$array as $key=>$value) {
    if (
is_array($value)) {
      
$return array_merge($returnParser_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']

[#9] cyberchrist at futura dot net [2007-10-15 06:33:16]

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;
}

[#10] mo dot longman at gmail dot com [2007-07-30 23:27:30]

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.

[#11] rune at zedeler dot dk [2007-02-27 20:42:52]

Notice that keys are considered equal if they are "=="-equal. That is:

<?php
$a 
= array();
$a[1] = 'this is the first value';
$a[true] = 'this value overrides the first value';
$a['1'] = 'so does this one';
?>

[#12] ob at babcom dot biz [2006-08-28 04:23:02]

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

<?php
// 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;
}
?>

上一篇: 下一篇: