PHP 5.6.0RC3 is available

配列 関数

参考

is_array(), explode(), implode(), split(), preg_split(), および join() も参照してください。

目次

  • 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 — ユーザー定義の比較関数を使用して、配列を値でソートする
add a note add a note

User Contributed Notes 11 notes

up
6
renatonascto at gmail dot com
5 years ago
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!
up
1
ob at babcom dot biz
7 years ago
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;
}
?>
up
-1
mo dot longman at gmail dot com
7 years ago
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.
up
-1
oliverSPAMMENOT at e-geek dot com dot au
4 years ago
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;
}
?>
up
-3
kolkabes at googlemail dot com
2 years ago
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;
}
?>
up
-3
Jck_true (leave out the &#39;_&#39; at gmail dot com)
6 years ago
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']
up
-2
callmeanaguma at gmail dot com
1 year ago
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;
}
?>
up
-4
rune at zedeler dot dk
7 years ago
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';
?>
up
-3
dave at davidhbrown dot us
2 years ago
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, $shift, NULL, true), array_slice($array, 0, $shift, true));
}
?>
A few simple tests:
<?php
$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));
?>
up
-3
seva dot lapsha at gmail dot com
4 years ago
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/
up
-5
cyberchrist at futura dot net
6 years ago
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;
}
To Top