hirokawa Sun Dec 30 20:09:52 2001 EDT Modified files: /phpdoc/ja/functions array.xml Log: translation updated.
Index: phpdoc/ja/functions/array.xml diff -u phpdoc/ja/functions/array.xml:1.36 phpdoc/ja/functions/array.xml:1.37 --- phpdoc/ja/functions/array.xml:1.36 Wed Dec 12 15:52:43 2001 +++ phpdoc/ja/functions/array.xml Sun Dec 30 20:09:52 2001 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.36 $ --> +<!-- $Revision: 1.37 $ --> <reference id="ref.array"> <title>配列関数(array)</title> <titleabbrev>Arrays</titleabbrev> @@ -36,7 +36,9 @@ <funcsynopsis> <funcprototype> <funcdef>array <function>array</function></funcdef> - <varargs/> + <paramdef>mixed + <parameter><optional>...</optional></parameter> + </paramdef> </funcprototype> </funcsynopsis> <para> @@ -65,11 +67,13 @@ <example> <title><function>array</function>の例</title> <programlisting role="php"> +<![CDATA[ $fruits = array ( "fruits" => array("a"=>"orange", "b"=>"banana", "c"=>"apple"), "numbers" => array(1, 2, 3, 4, 5, 6), "holes" => array("first", 5 => "second", "third") ); +]]> </programlisting> </example> </para> @@ -77,13 +81,15 @@ <example> <title><function>array</function> における自動インデックス</title> <programlisting role="php"> +<![CDATA[ $array = array( 1, 1, 1, 1, 1, 8=>1, 4=>1, 19, 3=>13); print_r($array); +]]> </programlisting> - </example> - この例の出力は次のようになります。 - <informalexample> - <programlisting> + <para> + この例の出力は次のようになります。 + <screen role="php"> +<![CDATA[ Array ( [0] => 1 @@ -94,8 +100,10 @@ [8] => 1 [9] => 19 ) - </programlisting> - </informalexample> +]]> + </screen> + </para> + </example> インデックス '3' は二度定義されており、後の値 13 が保持されること に注意して下さい。インデックス 4 はインデックス 8 の後に定義され、 次に生成されるインデックス(値は19)は、最大のインデックスが 8 であ @@ -106,27 +114,83 @@ <example> <title><function>array</function> で1から始まる配列を作成</title> <programlisting role="php"> - $firstquarter = array(1 => 'January', 'February', 'March'); - print_r($firstquarter); +<![CDATA[ +$firstquarter = array(1 => 'January', 'February', 'March'); +print_r($firstquarter); +]]> </programlisting> - </example> - この例の出力は次のようになります。 - <informalexample> - <programlisting> + <para> + この例の出力は次のようになります。 + <screen> +<![CDATA[ Array ( - [1] => 'January' - [2] => 'February' - [3] => 'March' + [1] => 'January' + [2] => 'February' + [3] => 'March' ) - </programlisting> - </informalexample> +]]> + </screen> + </para> + </example> </para> <para> - <function>list</function>も参照下さい。 + <function>array_pad</function>, <function>list</function>, + <function>range</function>も参照下さい。 </para> </refsect1> </refentry> + + <refentry id="function.array-change-key-case"> + <refnamediv> + <refname>array_change_key_case</refname> + <refpurpose> + 配列のキーを全て小文字または大文字にして返す + </refpurpose> + </refnamediv> + <refsect1> + <title>説明</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>array_change_key_case</function></funcdef> + <paramdef>array <parameter>input</parameter></paramdef> + <paramdef>int + <parameter><optional>case</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>array_change_key_case</function> は、配列 + +<parameter>input</parameter>のキーを全て小文字または大文字にします。 + +変更は、オプションの最後のパラメータ<parameter>case</parameter>に依存 + +します。ここには、二つの定数<constant>CASE_UPPER</constant>および + <constant>CASE_LOWER</constant>を指定可能です。デフォルトは、 + +<constant>CASE_LOWER</constant>です。この関数は数値添字はそのままに + します。 + </para> + <example> + <title><function>array_change_key_case</function>の例</title> + <programlisting role="php"> +<![CDATA[ +$input_array = array("FirSt" => 1, "SecOnd" => 4); +print_r(array_change_key_case($input_array, CASE_UPPER); +]]> + </programlisting> + <para> + 上のプログラムの出力は以下のようになります。 + <screen> +<![CDATA[ +Array +( + [FIRST] => 1 + [SECOND] => 2 +) +]]> + </screen> + </para> + </example> + </refsect1> + </refentry> <refentry id="function.array-chunk"> <refnamediv> @@ -158,18 +222,19 @@ 可能です。&false;を指定した場合、返される各配列ではゼロから始まる 新しい添字が使用されます。デフォルトは、&false;です。 </para> - <para> - <example> - <title><function>array_chunk</function> の例</title> - <programlisting role="php"> + <example> + <title><function>array_chunk</function> の例</title> + <programlisting role="php"> +<![CDATA[ $input_array = array('a', 'b', 'c', 'd', 'e'); print_r(array_chunk($input_array, 2)); print_r(array_chunk($input_array, 2, TRUE)); - </programlisting> - </example> - 上のプログラムの出力は以下のようになります。 - <informalexample> - <programlisting> +]]> + </programlisting> + <para> + 上のプログラムの出力は以下のようになります。 + <screen> +<![CDATA[ Array ( [0] => Array @@ -210,9 +275,10 @@ ) ) - </programlisting> - </informalexample> - </para> +]]> + </screen> + </para> + </example> </refsect1> </refentry> @@ -239,15 +305,12 @@ <example> <title><function>array_count_values</function>の例</title> <programlisting role="php"> +<![CDATA[ $array = array(1, "hello", 1, "world", "hello"); array_count_values($array); // array(1=>2, "hello"=>2, "world"=>1)を返します +]]> </programlisting> </example> - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -265,9 +328,7 @@ <paramdef>array <parameter>array1</parameter></paramdef> <paramdef>array <parameter>array2</parameter></paramdef> <paramdef>array - <parameter> - <replaceable><optional> ...</optional></replaceable> - </parameter> + <parameter><optional> ...</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -280,16 +341,33 @@ <example> <title><function>array_diff</function> の例</title> <programlisting role="php"> +<![CDATA[ $array1 = array ("a" => "green", "red", "blue"); $array2 = array ("b" => "green", "yellow", "red"); $result = array_diff ($array1, $array2); +]]> </programlisting> </example> </para> <para> これにより、<varname>$result</varname> は - <literal>array ("blue");</literal> となります。 + <literal>array ("blue");</literal> となります。$array1に複数存在 + する場合でも全て同様に処理されます。 </para> + <note> + <simpara> + 二つの要素は、<literal>(string) $elem1 === (string) $elem2</literal> + +の場合のみ等しいと見直されます。言い換えると、文字列表現が同じ場合と + なります。 + <!-- TODO: example of it... --> + </simpara> + </note> + <warning> + <simpara> + この関数は、PHP 4.0.4では動作しません! + <!-- TODO: when exactly was this broken?... --> + </simpara> + </warning> <para> <function>array_intersect</function>も参照下さい。 </para> @@ -324,6 +402,7 @@ <example> <title><function>array_filter</function>の例</title> <programlisting role="php"> +<![CDATA[ function odd($var) { return ($var % 2 == 1); } @@ -332,11 +411,12 @@ return ($var % 2 == 0); } -$array1 = array ("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); +$array1 = array ("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); $array2 = array (6, 7, 8, 9, 10, 11, 12); $odd_arr = array_filter($array1, "odd"); $even_arr = array_filter($array2, "even"); +]]> </programlisting> </example> </para> @@ -346,6 +426,7 @@ り、<varname>$even_arr</varname> は <literal>array (6, 8, 10, 12);</literal>となります。 </para> + ¬e.func-callback; <para> <function>array_map</function>, <function>array_reduce</function>も参照下さい。 @@ -356,7 +437,7 @@ <refentry id="function.array-flip"> <refnamediv> <refname>array_flip</refname> - <refpurpose>配列の値を逆順にする</refpurpose> + <refpurpose>配列の値を反転にする</refpurpose> </refnamediv> <refsect1> <title>説明</title> @@ -367,21 +448,45 @@ </funcprototype> </funcsynopsis> <para> - <function>array_flip</function> は、配列を逆順にして返します。 + <function>array_flip</function> は、配列を反転して返します。 + すなわち、<parameter>trans</parameter>のキーは値となり、 + <parameter>trans</parameter>の値はキーとなります。 + </para> + <para> + +<parameter>trans</parameter>の値は有効なキーを必要とすることに注意して + 下さい。すなわち、キーは、<type>integer</type>または + +<type>string</type>である必要があります。ある値が間違った型である場合、 + +警告が出力され、問題のこのキー/値の組は逆順にされません。 + </para> + <para> + +ある値が複数回出現した場合、最後のキーがその値として使用され、その他の + 値は失われます。 + </para> + <para> + <function>array_flip</function>は失敗した場合に&false;を返します。 </para> <para> <example> <title><function>array_flip</function>の例</title> <programlisting role="php"> +<![CDATA[ $trans = array_flip ($trans); $original = strtr ($str, $trans); +]]> + </programlisting> + </example> + </para> + <para> + <example> + <title><function>array_flip</function>の例 : 衝突</title> + <programlisting role="php"> +<![CDATA[ +$trans = array ("a" => 1, "b" => 1, "c" => 2); +$trans = array_flip ($trans); +// ここで$transは次のようになります: array(1 => "b", 2 => "c"); +]]> </programlisting> </example> - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -412,6 +517,7 @@ <example> <title><function>array_fill</function> の例</title> <programlisting role="php"> +<![CDATA[ $a = array_fill(5, 6, 'banana'); /* @@ -424,6 +530,7 @@ $a[9] = "banana"; $a[10] = "banana"; */ +]]> </programlisting> </example> </para> @@ -443,9 +550,7 @@ <paramdef>array <parameter>array1</parameter></paramdef> <paramdef>array <parameter>array2</parameter></paramdef> <paramdef>array - <parameter> - <replaceable><optional> ...</optional></replaceable> - </parameter> + <parameter><optional> ...</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -458,9 +563,11 @@ <example> <title><function>array_intersect</function> の例</title> <programlisting role="php"> +<![CDATA[ $array1 = array ("a" => "green", "red", "blue"); $array2 = array ("b" => "green", "yellow", "red"); $result = array_intersect ($array1, $array2); +]]> </programlisting> </example> </para> @@ -468,12 +575,73 @@ これにより、<varname>$result</varname> は <literal>array ("a" => "green", "red");</literal>となります。 </para> + <note> + <simpara> + 二つの要素は、 + <literal>(string) $elem1 === (string) $elem2</literal>の場合のみ + +等しいとみなされます。言い換えると、文字列表現が同じ場合となります。 + <!-- TODO: example of it... --> + </simpara> + </note> + <warning> + <simpara> + この関数はPHP 4.0.4では動作しません! + <!-- TODO: when exactly was this broken?... --> + </simpara> + </warning> <para> <function>array_diff</function>も参照下さい。 </para> </refsect1> </refentry> + <refentry id="function.array-key-exists"> + <refnamediv> + <refname>array_key_exists</refname> + <refpurpose> + 指定したキーまたは添字が配列にあるかどうかを調べる + </refpurpose> + </refnamediv> + <refsect1> + <title>説明</title> + <funcsynopsis> + <funcprototype> + <funcdef>bool <function>array_key_exists</function></funcdef> + <paramdef>mixed <parameter>key</parameter></paramdef> + <paramdef>array <parameter>search</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + 指定した<parameter>key</parameter>が配列に設定されている場合、 + <function>array_key_exists</function>は&true;を返します。 + <parameter>key</parameter>は配列添字として使用できる全ての + 値を使用可能です。 + </para> + <para> + <example> + <title><function>array_key_exists</function>の例</title> + <programlisting role="php"> +<![CDATA[ +$search_array = array("first" => 1, "second" => 4); +if (array_key_exists("first", $search_array)) { + echo "The 'first' element is in the array"; +} +]]> + </programlisting> + </example> + </para> + <note> + <simpara> + この関数の名前は、PHPバージョン4.0.6では + <function>key_exists</function>です。 + </simpara> + </note> + <para> + <function>isset</function>も参照下さい。 + </para> + </refsect1> + </refentry> + <refentry id="function.array-keys"> <refnamediv> <refname>array_keys</refname> @@ -486,9 +654,7 @@ <funcdef>array <function>array_keys</function></funcdef> <paramdef>array <parameter>input</parameter></paramdef> <paramdef>mixed - <parameter> - <replaceable><optional>search_value</optional></replaceable> - </parameter> + <parameter><optional>search_value</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -505,6 +671,7 @@ <example> <title><function>array_keys</function>の例</title> <programlisting role="php"> +<![CDATA[ $array = array(0 => 100, "color" => "red"); array_keys($array); // array(0, "color")を返します @@ -513,6 +680,7 @@ $array = array ("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large")); array_keys ($array); // 配列("color", "size") を返します +]]> </programlisting> </example> </para> @@ -525,15 +693,18 @@ PHP 3ユーザ用の<function>array_keys</function>の実装 </title> <programlisting role="php"> +<![CDATA[ function array_keys ($arr, $term="") { $t = array(); while (list($k,$v) = each($arr)) { - if ($term && $v != $term) + if ($term && $v != $term) { continue; $t[] = $k; } - return $t; + } + return $t; } +]]> </programlisting> </example> </para> @@ -547,7 +718,9 @@ <refentry id="function.array-map"> <refnamediv> <refname>array_map</refname> - <refpurpose>指定した配列の要素にコールバック関数を適用する</refpurpose> + <refpurpose> + 指定した配列の要素にコールバック関数を適用する + </refpurpose> </refnamediv> <refsect1> <title>説明</title> @@ -572,12 +745,14 @@ <example> <title><function>array_map</function> の例</title> <programlisting role="php"> +<![CDATA[ function cube($n) { return $n*$n*$n; } $a = array(1, 2, 3, 4, 5); $b = array_map("cube", $a); +]]> </programlisting> </example> </para> @@ -589,6 +764,7 @@ <example> <title><function>array_map</function> - より多くの配列を使用</title> <programlisting role="php"> +<![CDATA[ function show_Spanish($n, $m) { return "The number $n is called $m in Spanish"; } @@ -647,6 +823,7 @@ // ) // // ) +]]> </programlisting> </example> </para> @@ -664,8 +841,9 @@ </para> <para> <example> - <title><function>array_map</function> - 配列の配列を作成する</title> + <title>配列の配列を作成する</title> <programlisting role="php"> +<![CDATA[ $a = array(1, 2, 3, 4, 5); $b = array("one", "two", "three", "four", "five"); $c = array("uno", "dos", "tres", "cuatro", "cinco"); @@ -712,6 +890,7 @@ // ) // // ) +]]> </programlisting> </example> </para> @@ -734,10 +913,8 @@ <funcdef>array <function>array_merge</function></funcdef> <paramdef>array <parameter>array1</parameter></paramdef> <paramdef>array <parameter>array2</parameter></paramdef> - <paramdef> - <parameter> - <replaceable><optional> ...</optional></replaceable> - </parameter> + <paramdef>array + <parameter><optional> ...</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -754,17 +931,19 @@ <example> <title><function>array_merge</function>の例</title> <programlisting role="php"> +<![CDATA[ $array1 = array ("color" => "red", 2, 4); $array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4); -array_merge ($array1, $array2); +$result = array_merge ($array1, $array2); +]]> </programlisting> - <para> - 返される配列は、array("color" => "green", 2, 4, "a", - "b", "shape" => "trapezoid", 4)となります。 - </para> </example> </para> <para> + 返される配列は、<literal>array("color" => "green", 2, 4, + "a", "b", "shape" => "trapezoid", 4)</literal>となります。 + </para> + <para> <function>array_merge_recursive</function>も参照下さい。 </para> </refsect1> @@ -782,10 +961,8 @@ <funcdef>array <function>array_merge_recursive</function></funcdef> <paramdef>array <parameter>array1</parameter></paramdef> <paramdef>array <parameter>array2</parameter></paramdef> - <paramdef> - <parameter> - <replaceable><optional> ...</optional></replaceable> - </parameter> + <paramdef>array + <parameter><optional> ...</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -805,17 +982,20 @@ <example> <title><function>array_merge_recursive</function>の例</title> <programlisting role="php"> -$ar1 = array("color" => array("favorite" => "red"), 5); -$ar2 = array(10, "color" => array("favorite" => "green", "blue")); -$result = array_merge_recursive($ar1, $ar2); +<![CDATA[ +$ar1 = array ("color" => array ("favorite" => "red"), 5); +$ar2 = array (10, "color" => array ("favorite" => "green", "blue")); +$result = array_merge_recursive ($ar1, $ar2); +]]> </programlisting> - <para> - 返される配列は、array("color" => array("favorite" => - array("red", "green"), "blue"), 5, 10)となります。 - </para> </example> </para> <para> + 返される配列は、<literal>array ("color" => array + ("favorite" => array ("red", "green"), "blue"), 5, 10)</literal> + となります。 + </para> + <para> <function>array_merge</function>も参照下さい。 </para> </refsect1> @@ -833,14 +1013,13 @@ <funcdef>bool <function>array_multisort</function></funcdef> <paramdef>array <parameter>ar1</parameter></paramdef> <paramdef>mixed - <parameter> - <replaceable><optional>arg</optional></replaceable> - </parameter> + <parameter><optional>arg</optional></parameter> </paramdef> - <paramdef> - <parameter> - <replaceable><optional>...</optional></replaceable> - </parameter> + <paramdef>mixed + <parameter><optional>...</optional></parameter> + </paramdef> + <paramdef>array + <parameter><optional>...</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -893,36 +1072,43 @@ およびSORT_REGULARにリセットします。 </para> <para> - 成功時に&true;、失敗した場合に - &false;を返します。 + 成功時に&true;、失敗した場合に&false;を返します。 </para> - <example> - <title>複数の配列をソートする</title> - <programlisting role="php"> + <para> + <example> + <title>複数の配列をソートする</title> + <programlisting role="php"> +<![CDATA[ $ar1 = array ("10", 100, 100, "a"); $ar2 = array (1, 3, "2", 1); array_multisort ($ar1, $ar2); - </programlisting> - <para> - この例では、ソートの後で、最初の配列は、10,"a", 100, 100となりま - す。2番目の配列は、1, 1, "2", 3を有します。最初の配列(100および - 100)の同じエントリに対応している2番目の配列のエントリは同時にソー - トされます。 - </para> - </example> - - <example> - <title>多次元の配列をソートする</title> - <programlisting role="php"> -$ar = array(array("10", 100, 100, "a"), array(1, 3, "2", 1)); -array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); - </programlisting> - <para> - この例では、ソートされた後、最初の配列は10,100, 100, "a" (文字列 - として昇順っ½ートされています)を有しており、2番目の配列は、 - 1, 3, "2", 1 (数値として降順にソートされています)となっています。 - </para> - </example> +]]> + </programlisting> + </example> + </para> + <para> + この例では、ソートの後で、最初の配列は、10,"a", 100, +100となりま + す。2番目の配列は、1, 1, "2", +3を有します。最初の配列(100および + +100)の同じエントリに対応している2番目の配列のエントリは同時にソー + トされます。 + </para> + <para> + <example> + <title>多次元の配列をソートする</title> + <programlisting role="php"> +<![CDATA[ +$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1)); +array_multisort ($ar[0], SORT_ASC, SORT_STRING, + $ar[1], SORT_NUMERIC, SORT_DESC); +]]> + </programlisting> + </example> + </para> + <para> + この例では、ソートされた後、最初の配列は10,100, 100, "a" +(文字列 + +として昇順でソートされています)を有しており、2番目の配列は、 + 1, 3, "2", 1 +(数値として降順にソートされています)となっています。 + </para> </refsect1> </refentry> @@ -955,6 +1141,7 @@ <example> <title><function>array_pad</function>の例</title> <programlisting role="php"> +<![CDATA[ $input = array (12, 10, 9); $result = array_pad ($input, 5, 0); @@ -965,6 +1152,7 @@ $result = array_pad ($input, 2, "noop"); // 埋める処理は行われません。 +]]> </programlisting> </example> </para> @@ -990,27 +1178,23 @@ は、要素一つ分短くなります。<parameter>array</parameter> が空の場 合、(または、配列でない場合、)&null;が返されます。 </para> - <para> - <example> - <title><function>array_pop</function>の例</title> - <programlisting role="php"> + <example> + <title><function>array_pop</function>の例</title> + <programlisting role="php"> +<![CDATA[ $stack = array ("orange", "apple", "raspberry"); $fruit = array_pop ($stack); - </programlisting> - <para> - これにより、$stackの要素は二つ("orange"および "apple")だけとなり、 - $fruit は"raspberry"となります。 - </para> - </example> +]]> + </programlisting> + </example> + <para> + これにより、<varname>$stack</varname>要素は二つ("orange"および + +"apple")だけとなり、<varname>$fruit</varname>は"raspberry"となります。 </para> + &return.falseproblem; <para> <function>array_push</function>,<function>array_shift</function>, <function>array_unshift</function>も参照下さい。 - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -1027,10 +1211,8 @@ <funcdef>int <function>array_push</function></funcdef> <paramdef>array <parameter>array</parameter></paramdef> <paramdef>mixed <parameter>var</parameter></paramdef> - <paramdef> - <parameter> - <replaceable><optional>...</optional></replaceable> - </parameter> + <paramdef>mixed + <parameter><optional>...</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -1041,8 +1223,11 @@ <parameter>array</parameter>の長さは渡された変数の数だけ増加します。 各<parameter>var</parameter>毎に以下を繰り返すことと同じ効果があります。 <programlisting role="php"> +<![CDATA[ $array[] = $var; +]]> </programlisting> + 各<parameter>var</parameter>で繰り返されます。 </para> <para> 処理後の配列の中の要素の数を返します。 @@ -1051,20 +1236,20 @@ <example> <title><function>array_push</function>の例</title> <programlisting role="php"> +<![CDATA[ $stack = array (1, 2); -array_push($stack, "+", 3); +array_push ($stack, "+", 3); +]]> </programlisting> </example> - この例の結果、$stackには、4つの要素1,2,"+",3があることになります。 + </para> + <para> + この例の結果、<varname>$stack</varname>には、4つの要素1,2,"+", + 3があることになります。 </para> <para> <function>array_pop</function>,<function>array_shift</function>, <function>array_unshift</function>も参照下さい。 - <note> - <para> - この関数は、 PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -1081,9 +1266,7 @@ <funcdef>mixed <function>array_rand</function></funcdef> <paramdef>array <parameter>input</parameter></paramdef> <paramdef>int - <parameter> - <replaceable><optional>num_req</optional></replaceable> - </parameter> + <parameter><optional>num_req</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -1109,11 +1292,13 @@ <example> <title><function>array_rand</function>の例</title> <programlisting role="php"> -srand((double)microtime() * 10000000); -$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); -$rand_keys = array_rand($input, 2); +<![CDATA[ +srand ((float) microtime() * 10000000); +$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); +$rand_keys = array_rand ($input, 2); print $input[$rand_keys[0]]."\n"; print $input[$rand_keys[1]]."\n"; +]]> </programlisting> </example> </para> @@ -1146,20 +1331,24 @@ <example> <title><function>array_reverse</function>の例</title> <programlisting role="php"> +<![CDATA[ $input = array ("php", 4.0, array ("green", "red")); $result = array_reverse ($input); $result_keyed = array_reverse ($input, TRUE); +]]> </programlisting> </example> + </para> + <para> この例において、<varname>$result</varname>は、<literal>array (array ("green", "red"), 4.0, "php")</literal>となります。しかし、 <varname>$result2[0]</varname>はまだ<literal>"php"</literal>です。 - <note> - <para> - この関数は、PHP 4.0ベータ3で追加されました。 - </para> - </note> </para> + <note> + <para> + 2番目のパラメータは、PHP 4.0.3で追加されました。 + </para> + </note> </refsect1> </refentry> @@ -1184,17 +1373,17 @@ </funcprototype> </funcsynopsis> <para> - <function>array_reduce</function> applies iteratively the - <parameter>callback</parameter> function to the elements of the - array <parameter>input</parameter>, so as to reduce the array to - a single value. If the optional <parameter>intial</parameter> is - avaliable, it will be used at the beginning of the process, or as - a final result in case the array is empty. + <function>array_reduce</function>は、配列<parameter>input</parameter> + の各要素に<parameter>callback</parameter>関数を繰り返し適用し、 + +配列を一つの値に減らします。オプション<parameter>intial</parameter> + +が利用可能な場合、処理の最初で使用されたり、配列が空の場合の最終結果 + として使用されます。 </para> <para> <example> - <title><function>array_reduce</function> example</title> + <title><function>array_reduce</function>の例</title> <programlisting role="php"> +<![CDATA[ function rsum($v, $w) { $v += $w; return $v; @@ -1210,18 +1399,19 @@ $b = array_reduce($a, "rsum"); $c = array_reduce($a, "rmul", 10); $d = array_reduce($x, "rsum", 1); +]]> </programlisting> </example> </para> <para> - This will result in <varname>$b</varname> containing - <literal>15</literal>, <varname>$c</varname> containing - <literal>1200</literal> (= 1*2*3*4*5*10), and - <varname>$d</varname> containing <literal>1</literal>. + これにより、<varname>$b</varname>の値は<literal>15</literal> + となり、<varname>$c</varname>の値は + <literal>1200</literal> (= 1*2*3*4*5*10)、そして、 + <varname>$d</varname>の値は<literal>1</literal>となります。 </para> <para> - See also <function>array_filter</function>, - <function>array_map</function>. + <function>array_filter</function>, + <function>array_map</function>も参照下さい。 </para> </refsect1> </refentry> @@ -1250,22 +1440,19 @@ <example> <title><function>array_shift</function>の例</title> <programlisting role="php"> +<![CDATA[ $args = array ("-v", "-f"); $opt = array_shift ($args); +]]> </programlisting> </example> - これにより、$argsには一つの要素"-f"が残り、$optは - "-v"となります。 + これにより、<varname>$args</varname>には一つの要素"-f"が残り、 + <varname>$opt</varname>は"-v"となります。 </para> <para> <function>array_unshift</function>, <function>array_push</function>, <function>array_pop</function>も参照下さい。 - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -1283,9 +1470,7 @@ <paramdef>array <parameter>array</parameter></paramdef> <paramdef>int <parameter>offset</parameter></paramdef> <paramdef>int - <parameter> - <replaceable><optional>length</optional></replaceable> - </parameter> + <parameter><optional>length</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -1311,22 +1496,19 @@ <example> <title><function>array_slice</function>の例</title> <programlisting role="php"> +<![CDATA[ $input = array ("a", "b", "c", "d", "e"); $output = array_slice ($input, 2); // "c", "d", "e"を返します $output = array_slice ($input, 2, -1); // "c", "d"を返します $output = array_slice ($input, -2, 1); // "d"を返します $output = array_slice ($input, 0, 3); // "a", "b", "c"を返します +]]> </programlisting> </example> </para> <para> <function>array_splice</function>も参照下さい。 - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -1344,14 +1526,10 @@ <paramdef>array <parameter>input</parameter></paramdef> <paramdef>int <parameter>offset</parameter></paramdef> <paramdef>int - <parameter> - <replaceable><optional>length</optional></replaceable> - </parameter> + <parameter><optional>length</optional></parameter> </paramdef> <paramdef>array - <parameter> - <replaceable><optional>replacement</optional></replaceable> - </parameter> + <parameter><optional>replacement</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -1392,11 +1570,13 @@ <para> 以下は等価となります。 <programlisting role="php"> +<![CDATA[ array_push($input, $x, $y) array_splice($input, count($input), 0, array($x, $y)) array_pop($input) array_splice($input, -1) array_shift($input) array_splice($input, 0, 1) array_unshift($input, $x, $y) array_splice($input, 0, 0, array($x, $y)) $a[$x] = $y array_splice($input, $x, 1, $y) +]]> </programlisting> </para> <para> @@ -1406,25 +1586,29 @@ <example> <title><function>array_splice</function>の例</title> <programlisting role="php"> -$input = array("red", "green", "blue", "yellow"); - -array_splice($input, 2); // $input は、array("red", "green") となります。 -array_splice($input, 1, -1); // $input は、array("red", "yellow") となります。 -array_splice($input, 1, count($input), "orange"); - // $input は、array("red", "orange") となります。 -array_splice($input, -1, 1, array("black", "maroon")); - // $input は、array("red", "green", - // "blue", "black", "maroon") となります。 +<![CDATA[ +$input = array ("red", "green", "blue", "yellow"); +array_splice ($input, 2); +// $input is now array ("red", "green") + +$input = array ("red", "green", "blue", "yellow"); +array_splice ($input, 1, -1); +// $input is now array ("red", "yellow") + +$input = array ("red", "green", "blue", "yellow"); +array_splice ($input, 1, count($input), "orange"); +// $input is now array ("red", "orange") + +$input = array ("red", "green", "blue", "yellow"); +array_splice ($input, -1, 1, array("black", "maroon")); +// $input is now array ("red", "green", +// "blue", "black", "maroon") +]]> </programlisting> </example> </para> <para> <function>array_slice</function>も参照下さい。 - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -1452,6 +1636,7 @@ <example> <title><function>array_sum</function> の例</title> <programlisting role="php"> +<![CDATA[ $a = array(2,4,6,8); echo "sum(a) = ".array_sum($a)."\n"; // 出力: sum(a) = 20 @@ -1459,9 +1644,16 @@ $b = array("a"=>1.2,"b"=>2.3,"c"=>3.4); echo "sum(b) = ".array_sum($b)."\n"; // 出力: sum(b) = 6.9 +]]> </programlisting> </example> </para> + <note> + <para> + +4.0.6より前のバージョンのPHPは、渡された配列自体を修正し、文字列を + +数値(これは値にもよるが多くの場合ゼロとなります)に変換していました。 + </para> + </note> </refsect1> </refentry> @@ -1481,21 +1673,69 @@ <para> <function>array_unique</function> は、 <parameter>array</parameter>を入力とし、値に重複のない新規配列を - 返します。キーは保持されることに注意して下さい。 + 返します。 + </para> + <para> + キーは保持されることに注意して下さい。 + +<function>array_unique</function>は各値に関する最初のキーを保持し、 + 残りのキーを全て無視します。 </para> + <note> + <simpara> + <literal>(string) $elem1 === (string) $elem2</literal>の場合のみ + +二つの要素は等しいとみなされます。言い換えると、文字列表現が + 同じ場合となります。 + <!-- TODO: example of it... --> + </simpara> + <simpara> + 最初の要素が使用されます。 + </simpara> + </note> + <warning> + <simpara> + この関数は、PHP 4.0.4では使用できません! + <!-- TODO: when exactly was this broken?... --> + </simpara> + </warning> <para> <example> <title><function>array_unique</function> の例</title> <programlisting role="php"> +<![CDATA[ $input = array ("a" => "green", "red", "b" => "green", "blue", "red"); $result = array_unique ($input); +print_r($result); +// 出力は次のようになります : +//Array +//( +// [a] => green +// [0] => red +// [1] => blue +//) +]]> </programlisting> </example> </para> <para> - この例により、<varname>$result</varname> は、 - <literal>array ("a" =>"green", "red", "blue");</literal>を有する - ことになります。 + <example> + <title><function>array_unique</function>と型</title> + <programlisting role="php"> +<![CDATA[ +$input = array (4,"4","3",4,3,"3"); +$result = array_unique ($input); +var_dump($result); + +/* 出力: +array(2) { + [0]=> + int(4) + [1]=> + string(1) "3" +} +*/ +]]> + </programlisting> + </example> </para> </refsect1> </refentry> @@ -1503,7 +1743,7 @@ <refentry id="function.array-unshift"> <refnamediv> <refname>array_unshift</refname> - <refpurpose> 一つ以上の要素を 配列の 最初に加える </refpurpose> + <refpurpose> 一つ以上の要素を配列の最初に加える </refpurpose> </refnamediv> <refsect1> <title>説明</title> @@ -1512,10 +1752,8 @@ <funcdef>int <function>array_unshift</function></funcdef> <paramdef>array <parameter>array</parameter></paramdef> <paramdef>mixed <parameter>var</parameter></paramdef> - <paramdef> - <parameter> - <replaceable><optional>...</optional></replaceable> - </parameter> + <paramdef>mixed + <parameter><optional>...</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -1531,22 +1769,19 @@ <example> <title><function>array_unshift</function>の例</title> <programlisting role="php"> -$queue = array("p1", "p3"); -array_unshift($queue, "p4", "p5", "p6"); +<![CDATA[ +$queue = array ("p1", "p3"); +array_unshift ($queue, "p4", "p5", "p6"); +]]> </programlisting> </example> - この例により、$queue の要素は次の5つとなります。: "p4", "p5", "p6", - "p1", "p3" + +この例により、<varname>$queue</varname>の要素は次の5つとなります。 + : "p4", "p5", "p6", "p1", "p3" </para> <para> <function>array_shift</function>, <function>array_push</function>, <function>array_pop</function>も参照下さい。 - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -1572,15 +1807,37 @@ <example> <title><function>array_values</function>の例</title> <programlisting role="php"> +<![CDATA[ $array = array("size" => "XL", "color" => "gold"); array_values($array); // array("XL", "gold")を返します +]]> </programlisting> </example> - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> + </para> + <note> + <para> + この関数は、PHP 4.0で追加されました。以下の実装はPHP +3でも + 使用することが可能です。 + <example> + <title> + PHP 3ユーザ用の<function>array_values</function>の実装 + </title> + <programlisting role="php"> +<![CDATA[ +function array_values ($arr) { + $t = array(); + while (list($k, $v) = each ($arr)) { + $t[] = $v; + } + return $t; +} +]]> + </programlisting> + </example> + </para> + </note> + <para> + <function>array_keys</function>も参照下さい。 </para> </refsect1> </refentry> @@ -1599,22 +1856,31 @@ <funcdef>int <function>array_walk</function></funcdef> <paramdef>array <parameter>arr</parameter></paramdef> <paramdef>string <parameter>func</parameter></paramdef> - <paramdef>mixed <parameter>userdata</parameter></paramdef> + <paramdef>mixed + <parameter><optional>userdata</optional></parameter> + </paramdef> </funcprototype> </funcsynopsis> <simpara> <parameter>arr</parameter>の各要素に<parameter>func</parameter> - という名前の関数を適用します。 + という名前のユーザ定義関数を適用します。 <parameter>func</parameter>には、配列の値が最初の引数として 渡され、配列のキーが2番目のパラメータとして渡されます。 <parameter>userdata</parameter>が指定された場合、3番目の引数として - ユーザー関数に渡されます。 + +ユーザー関数に渡されます。<parameter>func</parameter>はユーザ定義の + +関数である必要があり、ネーティブなPHP関数は使用できません。 + つまり、<function>array_walk</function>を直接 + <function>str2lower</function>と組み合わせることて使用することは + +できません。まず、この関数を用いてユーザ定義関数を構築し、その関数 + を引数として渡す必要があります。 + </simpara> + ¬e.func-callback; + <simpara> <parameter>func</parameter>が2つまたは3つを超える引数を必要とする場合、 <parameter>userdata</parameter>の指定によっては、 <function>array_walk</function>が<parameter>func</parameter> - をコールする度に警告が生成されます。 - これらの警告は、<function>array_walk</function>の前に - '@'マークを付けるか + をコールする度に警告が生成されます。これらの警告は、 + <function>array_walk</function>の前に'@'マークを付けるか <function>error_reporting</function>を使用することにより 抑制されます。 </simpara> @@ -1625,11 +1891,15 @@ 渡す必要があります。この場合、配列の要素に加えた変更は、配列自体 に対して行われます。 </para> + <para> + +<parameter>func</parameter>の中から配列を修正すると予測できない + 動作を引き起こす可能性があります。 + </para> </note> <note> <para> キー及びuserdataを<parameter>func</parameter>に渡す処理は、 - バージョン 4.0で追加されました。 + バージョン4.0で追加されました。 </para> <para> PHP 4では、<function>array_walk</function>で配列のリセットがデフォ @@ -1641,14 +1911,15 @@ <example> <title><function>array_walk</function>の例</title> <programlisting role="php"> +<![CDATA[ $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); - -function test_alter (&$item1, $key, $prefix) { - $item1 = "$prefix: $item1"; + +function test_alter (&$item1, $key, $prefix) { + $item1 = "$prefix: $item1"; } function test_print ($item2, $key) { - echo "$key. $item2<br>\n"; + echo "$key. $item2<br>\n"; } array_walk ($fruits, 'test_print'); @@ -1656,6 +1927,7 @@ array_walk ($fruits, 'test_alter', 'fruit'); reset ($fruits); array_walk ($fruits, 'test_print'); +]]> </programlisting> </example> </para> @@ -1670,7 +1942,7 @@ <refnamediv> <refname>arsort</refname> <refpurpose> - 連想キーと要素との関係を維持しつつ配列を逆順にソートします + +連想キーと要素との関係を維持しつつ配列を逆順にソートする </refpurpose> </refnamediv> <refsect1> @@ -1680,9 +1952,7 @@ <funcdef>void <function>arsort</function></funcdef> <paramdef>array <parameter>array</parameter></paramdef> <paramdef>int - <parameter> - <replaceable><optional>sort_flags</optional></replaceable> - </parameter> + <parameter><optional>sort_flags</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -1690,24 +1960,32 @@ この関数は、連想配列において各配列のキーと要素との関係を維持しつ つソートを行います。この関数は、主に実際の要素の並び方が重要であ る連想配列をソートするために使われます。 - <example> - <title><function>arsort</function>の例</title> - <programlisting role="php"> + </para> + <example> + <title><function>arsort</function>の例</title> + <programlisting role="php"> +<![CDATA[ $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); arsort ($fruits); -reset($fruits); -while(list($key,$val)=each($fruits)) { +reset ($fruits); +while (list ($key, $val) = each ($fruits)) { echo "$key = $val\n"; } - </programlisting> - </example> - この例は、以下のように出力されます。 - <computeroutput> -fruits[a] = orange -fruits[d] = lemon -fruits[b] = banana -fruits[c] = apple - </computeroutput> +]]> + </programlisting> + <para> + この例は、以下のように出力されます。 + <screen> +<![CDATA[ +a = orange +d = lemon +b = banana +c = apple +]]> + </screen> + </para> + </example> + <para> fruitsはアルファベットの逆順にソートされ、各要素とキーとの関係は 維持されます。 </para> @@ -1727,7 +2005,9 @@ <refentry id="function.asort"> <refnamediv> <refname>asort</refname> - <refpurpose>連想キーと要素との関係を維持しつつ配列をソートします</refpurpose> + <refpurpose> + 連想キーと要素との関係を維持しつつ配列をソートする + </refpurpose> </refnamediv> <refsect1> <title>説明</title> @@ -1736,9 +2016,7 @@ <funcdef>void <function>asort</function></funcdef> <paramdef>array <parameter>array</parameter></paramdef> <paramdef>int - <parameter> - <replaceable><optional>sort_flags</optional></replaceable> - </parameter> + <parameter><optional>sort_flags</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -1746,24 +2024,32 @@ この関数は、連想配列において各配列のキーと要素との関係を維持しつ つ配列をソートします。この関数は、主に実際の要素の並び方が重要で ある連想配列をソートするために使われます。 - <example> - <title><function>asort</function>の例</title> - <programlisting role="php"> + </para> + <example> + <title><function>asort</function>の例</title> + <programlisting role="php"> +<![CDATA[ $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); asort ($fruits); -reset($fruits); -while(list($key,$val)=each($fruits)) { - echo "$key = $val\n"; +reset ($fruits); +while (list ($key, $val) = each ($fruits)) { + echo "$key = $val\n"; } - </programlisting> - </example> - この例は、以下のように出力されます。 - <computeroutput> -fruits[c] = apple -fruits[b] = banana -fruits[d] = lemon -fruits[a] = orange - </computeroutput> +]]> + </programlisting> + <para> + この例は、以下のように出力されます。 + <screen> +<![CDATA[ +c = apple +b = banana +d = lemon +a = orange +]]> + </screen> + </para> + </example> + <para> fruitsはアルファベットの昇順にソートされ、各要素とキーとの関係は 維持されます。 </para> @@ -1791,12 +2077,9 @@ <funcsynopsis> <funcprototype> <funcdef>array <function>compact</function></funcdef> - <paramdef><parameter>string varname | array - varnames</parameter></paramdef> - <paramdef> - <parameter> - <replaceable><optional>...</optional></replaceable> - </parameter> + <paramdef>mixed <parameter>varname</parameter></paramdef> + <paramdef>mixed + <parameter><optional>...</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> @@ -1820,6 +2103,7 @@ <example> <title><function>compact</function>の例</title> <programlisting role="php"> +<![CDATA[ $city = "San Francisco"; $state = "CA"; $event = "SIGGRAPH"; @@ -1827,20 +2111,18 @@ $location_vars = array ("city", "state"); $result = compact ("event", "nothing_here", $location_vars); +]]> </programlisting> <para> - この例により、$resultは、array("event" => "SIGGRAPH", "city" - => "San Francisco", "state" => "CA")となります。 + この例により、<varname>$result</varname>は、 + <literal>array + ("event" => "SIGGRAPH", "city" => "San Francisco", + "state" => "CA")</literal>となります。 </para> </example> </para> <para> <function>extract</function>も参照下さい。 - <note> - <para> - この関数は、PHP 4.0で追加されました。 - </para> - </note> </para> </refsect1> </refentry> @@ -1864,43 +2146,52 @@ ありませんから)。 </para> <para> - 変数が配列でない場合は1を返します。 + 変数が配列でない場合は<literal>1</literal>を返します。 + (例外: <literal>count(&null;)</literal> は<literal>0</literal>と等価) </para> + <warning> + <para> + +<function>count</function>は、セットされていない変数に関して0を返 + +しますが、変数が空の配列として初期化されている場合にも0を返します。 + ある変数がセットされているかどうかを調べるには、 + <function>isset</function>を使用してください。 + </para> + </warning> <para> - 変数がセットされていない場合は0を返します。 - <warning> - <para> - <function>count</function>は、セットされていない変数に関して0を返 - しますが、変数が空の配列として初期化されている場合にも0を返します。 - ある変数がセットされているかどうかを調べるには、 - <function>isset</function>を使用してください。 - </para> - </warning> + +配列の実装やPHPでの使用法に関する詳細な説明についてはマニュアルの + <link linkend="language.types.array">配列</link>のセクションを + 参照下さい。 </para> <para> <example> <title><function>count</function> の例</title> <programlisting role="php"> + <!-- TODO: examples about count(null), count(false), count(object).. --> +<![CDATA[ $a[0] = 1; $a[1] = 3; $a[2] = 5; $result = count ($a); -// 代入された要素は3であり、$result は 2ではなく3となる +// $result == 3 -$a[2] = 1; -$a[4] = ""; -$a[6] = 5; -$a[8] = 7; -$a[10] = 11; -$a[12] = ""; -$result = count ($a); -// 代入された要素は4つなので、$result == 4 です。 +$b[0] = 7; +$b[5] = 9; +$b[10] = 11; +$result = count ($b); +// $result == 3; +]]> </programlisting> </example> </para> + <note> + <para> + <function>sizeof</function>関数は、<function>count</function> + へのエイリアスです。 + </para> + </note> <para> - <function>sizeof</function>, <function>isset</function>, - <function>is_array</function>も参照下さい。 + <function>is_array</function>, <function>isset</function>, + <function>strlen</function>も参照下さい。 </para> </refsect1> </refentry> @@ -1908,7 +2199,7 @@ <refentry id="function.current"> <refnamediv> <refname>current</refname> - <refpurpose>配列内の現在の要素を返す</refpurpose> + <refpurpose>配列内のカレントの要素を返す</refpurpose> </refnamediv> <refsect1> <title>説明</title> @@ -1919,7 +2210,7 @@ </funcprototype> </funcsynopsis> <para> - 各配列は、"現在"の要素へのポインタを有しています。 + 各配列は、"カレント"の要素へのポインタを有しています。 このポインタは、その配列の最初の要素を指すように初期化されます。 </para> <para> @@ -1960,7 +2251,7 @@ </funcprototype> </funcsynopsis> <para> - 配列<parameter>array</parameter>から、次のキャh値のペアを返し、 + +配列<parameter>array</parameter>から、次のキーと値のペアを返し、 配列カーソルを進めます。このペアは、4つの要素を持つ配列で、 それぞれの要素は<emphasis>0</emphasis>,<emphasis>1</emphasis>, <emphasis>key</emphasis>,<emphasis>value</emphasis>というキーを有 @@ -1976,32 +2267,35 @@ <example> <title><function>each</function>の例</title> <programlisting role="php"> +<![CDATA[ $foo = array ("bob", "fred", "jussi", "jouni", "egon", "marliese"); -$bar = each( $foo ); +$bar = each ($foo); +]]> </programlisting> <para> <literal>$bar</literal>は、ここでは以下のキー/値のペアを保持し ています。 <itemizedlist spacing="compact"> - <listitem><simpara>0 => 0</simpara></listitem> - <listitem><simpara>1 => 'bob'</simpara></listitem> - <listitem><simpara>key => 0</simpara></listitem> - <listitem><simpara>value => 'bob'</simpara></listitem> + <listitem><simpara>0 => 0</simpara></listitem> + <listitem><simpara>1 => 'bob'</simpara></listitem> + <listitem><simpara>key => 0</simpara></listitem> + <listitem><simpara>value => 'bob'</simpara></listitem> </itemizedlist> - <programlisting role="php"> +<![CDATA[ $foo = array ("Robert" => "Bob", "Seppo" => "Sepi"); $bar = each ($foo); +]]> </programlisting> </para> <para> <literal>$bar</literal>は、この時点で以下のキー/値のペアを保持 しています。 <itemizedlist spacing="compact"> - <listitem><simpara>0 => 'Robert'</simpara></listitem> - <listitem><simpara>1 => 'Bob'</simpara></listitem> - <listitem><simpara>key => 'Robert'</simpara></listitem> - <listitem><simpara>value => 'Bob'</simpara></listitem> + <listitem><simpara>0 => 'Robert'</simpara></listitem> + <listitem><simpara>1 => 'Bob'</simpara></listitem> + <listitem><simpara>key => 'Robert'</simpara></listitem> + <listitem><simpara>value => 'Bob'</simpara></listitem> </itemizedlist> </para> </example> @@ -2009,24 +2303,27 @@ <para> 通常<function>each</function>は、配列の走査をす?_っk <function>list</function>と共に使用されます。例えば、 - $HTTP_POST_VARSの場合は次のよFになります。 + $HTTP_POST_VARSの場合は次のようになります。 <example> <title> <function>each</function>により$HTTP_POST_VARSを走査する </title> <programlisting role="php"> -echo "POSTメソッドにより受け渡された値:<br>"; +<![CDATA[ +echo "POSTメソッドにより受け渡された値:<br>"; reset ($HTTP_POST_VARS); while (list ($key, $val) = each ($HTTP_POST_VARS)) { - echo "$key => $val<br>"; + echo "$key => $val<br>"; } +]]> </programlisting> </example> </para> <para> <function>each</function>を実行した後、配列カーソルは、 - 配列の次の要素に移動し~す。配列の最終要素にカーソルがある場合は、 - 最終要素にとどまります。 + +配列の次の要素に移動します。配列の最終要素にカーソルがある場合は、 + +最終要素にとどまります。eachを使用して配列を走査するには、 + <function>reset</function>を使用する必要があります。 </para> <para> <function>key</function>、<function>list</function>、 @@ -2178,8 +2475,9 @@ <example> <title><function>extract</function>の例</title> <programlisting role="php"> -<?php - +<![CDATA[ +<?php + /* $var_array はwddx_deserializeから返された配列と仮定します */ $size = "large"; @@ -2191,21 +2489,26 @@ print "$color, $size, $shape, $wddx_size\n"; ?> +]]> </programlisting> </example> </para> <para> 上記の例の結果は以下となります。 <programlisting> +<![CDATA[ blue, large, sphere, medium +]]> </programlisting> </para> <para> - EXTR_PREFIX_SAMEを指定したため、$sizeは上書きされず、$wddx_size - が作成されます。 + EXTR_PREFIX_SAMEを指定したため、<varname>$size</varname>は上書き + されず、<varname>$wddx_size</varname>が作成されます。 EXTR_SKIPが指定された場合、$wddx_sizeは作成されません。EXTR_OVERWRITE - の場合は、$sizeの値は"medium"となります。EXTR_PREFIX_ALLの場合は - 新規の変数 $wddx_color, $wddx_size, $wddx_shapeが作成されます。 + の場合は、<varname>$size</varname>の値は"medium"となります。 + EXTR_PREFIX_ALLの場合は新規の変数<varname>$wddx_color</varname>, + <varname>$wddx_size</varname>, <varname>$wddx_shape</varname> + が作成されます。 </para> <para> 連想配列を使用する必要があり、数値添字の配列には結果は出力されま @@ -2237,8 +2540,7 @@ <para> <parameter>haystack</parameter>で <parameter>needle</parameter>を検索し、配列にそれがあった場合に - &true;、それ以外の場合は、 - &false;を返します。 + &true;、それ以外の場合は、&false;を返します。 </para> <para> 3番目のパラメータ<parameter>strict</parameter>が @@ -2246,14 +2548,25 @@ <function>in_array</function>は、<parameter>haystack</parameter> の中の <parameter>needle</parameter>の型も確認します。 </para> + <note> + <para> + +<parameter>needle</parameter>が文字列の場合、比較の際に大文字小文字 + は区別されます。 + </para> + </note> <para> <example> <title><function>in_array</function>の例</title> <programlisting role="php"> +<![CDATA[ $os = array ("Mac", "NT", "Irix", "Linux"); -if (in_array ("Irix", $os)){ +if (in_array ("Irix", $os)) { print "Got Irix"; } +if (in_array ("mac", $os)) { # +in_array()は大文字小文字を区別するため失敗 + print "Got mac"; +} +]]> </programlisting> </example> </para> @@ -2261,18 +2574,20 @@ <example> <title>strictを指定した<function>in_array</function>の例</title> <programlisting role="php"> -<?php +<![CDATA[ +<?php $a = array('1.10', 12.4, 1.13); if (in_array('12.4', $a, TRUE)) - echo "'12.4' found with strict check\n"; + echo "'12.4' found with strict check\n"; if (in_array(1.13, $a, TRUE)) - echo "1.13 found with strict check\n"; -?> + echo "1.13 found with strict check\n"; +?> -// この例は以下のような出力となります。 +// 以下のような出力となります。 1.13 found with strict check +]]> </programlisting> </example> </para> @@ -2296,14 +2611,15 @@ <funcdef>mixed <function>array_search</function></funcdef> <paramdef>mixed <parameter>needle</parameter></paramdef> <paramdef>array <parameter>haystack</parameter></paramdef> - <paramdef>bool <parameter>strict</parameter></paramdef> + <paramdef>bool + <parameter><optional>strict</optional></parameter> + </paramdef> </funcprototype> </funcsynopsis> <para> <parameter>haystack</parameter>において <parameter>needle</parameter>を検索し、配列中に見付かった場合にそ - のキーを返します。そうでない場合に&false;を返し - ます。 + のキーを返します。そうでない場合に&false;を返します。 </para> <para> 3番目のパラメータ<parameter>strict</parameter>が @@ -2312,6 +2628,7 @@ <parameter>haystack</parameter>の中にある <parameter>needle</parameter>の型も確認します。 </para> + &return.falseproblem; <para> <function>in_array</function>も参照下さい。 </para> @@ -2366,21 +2683,31 @@ <example> <title><function>krsort</function>の例</title> <programlisting role="php"> +<![CDATA[ $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); krsort ($fruits); reset($fruits); while(list($key,$val)=each($fruits)) { echo "$key -> $val\n"; } +]]> </programlisting> </example> + </para> + <para> この例の出力は次のようになります。 - <computeroutput> -fruits[d] = lemon -fruits[c] = apple -fruits[b] = banana -fruits[a] = orange - </computeroutput> + </para> + <para> + <informalexample> + <programlisting> +<![CDATA[ +d = lemon +c = apple +b = banana +a = orange +]]> + </programlisting> + </informalexample> </para> <para> オプションのパラメータ<parameter>sort_flags</parameter>によりソー @@ -2390,7 +2717,7 @@ <simpara> <function>asort</function>, <function>arsort</function>, <function>ksort</function>, <function>sort</function>, - <function>rsort</function>も参照下さい。 + <function>natsort</function>, <function>rsort</function>も参照下さい。 </simpara> </refsect1> </refentry> @@ -2419,28 +2746,37 @@ <example> <title><function>ksort</function>の例</title> <programlisting role="php"> +<![CDATA[ $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); ksort ($fruits); -reset($fruits); -while(list($key,$val)=each($fruits)) { - echo "$key -> $val\n"; +reset ($fruits); +while (list ($key, $val) = each ($fruits)) { + echo "$key = $val\n"; } +]]> </programlisting> </example> + </para> + <para> この例では以下のように出力が行われます。 - <computeroutput> -fruits[a] = orange -fruits[b] = banana -fruits[c] = apple -fruits[d] = lemon - </computeroutput> + </para> + <para> + <informalexample> + <programlisting> +<![CDATA[ +a = orange +b = banana +c = apple +d = lemon +]]> + </programlisting> + </informalexample> </para> <para> オプションのパラメータ<parameter>sort_flags</parameter>によりソー トの動作を修正可能です。詳細については、<function>sort</function> を参照下さい。 </para> - <simpara> <function>asort</function>, <function>arsort</function>, <function>sort</function>, <function>natsort</function>, @@ -2476,25 +2812,27 @@ <example> <title><function>list</function>の例</title> <programlisting role="php"> -<table> - <tr> - <th>従業員名</th> - <th>給与</th> - </tr> - -<?php - -$result = mysql_query ($conn, "SELECT id, name, salary FROM employees"); -while (list($id, $name, $salary) = mysql_fetch_row($result)) { - print(" <tr>\n". - " <td><a href=\"info.php3?id=$id\">$name</a></td>\n". - " <td>$salary</td>\n". - " </tr>\n"); +<![CDATA[ +<table> + <tr> + <th>社員名</th> + <th>給料</th> + </tr> + +<?php + +$result = mysql_query ("SELECT id, name, salary FROM employees",$conn); +while (list ($id, $name, $salary) = mysql_fetch_row ($result)) { + print (" <tr>\n". + " <td><a href=\"info.php3?id=$id\">$name</a></td>\n". + " <td>$salary</td>\n". + " </tr>\n"); } ?> -</table> +</table> +]]> </programlisting> </example> </para> @@ -2531,8 +2869,9 @@ <example> <title><function>natsort</function>の例</title> <programlisting role="php"> -$array1 = $array2 = array ("img12.png","img10.png","img2.png","img1.png"); - +<![CDATA[ +$array1 = $array2 = array ("img12.png", "img10.png", "img2.png", "img1.png"); + sort($array1); echo "Standard sorting\n"; print_r($array1); @@ -2540,6 +2879,7 @@ natsort($array2); echo "\nNatural order sorting\n"; print_r($array2); +]]> </programlisting> </example> </para> @@ -2549,6 +2889,7 @@ <para> <informalexample> <programlisting> +<![CDATA[ Standard sorting Array ( @@ -2566,6 +2907,7 @@ [1] => img10.png [0] => img12.png ) +]]> </programlisting> </informalexample> より詳細な情報については、Martin Poolの<ulink @@ -2733,16 +3075,56 @@ <funcsynopsis> <funcprototype> <funcdef>array <function>range</function></funcdef> - <paramdef>int <parameter>low</parameter></paramdef> - <paramdef>int <parameter>high</parameter></paramdef> + <paramdef>mixed <parameter>low</parameter></paramdef> + <paramdef>mixed <parameter>high</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>range</function>は、<parameter>low</parameter>から <parameter>high</parameter>までの整数の配列を返します。 + low > highの場合、順番はhighからlowとなります。 </para> + <example> + <title><function>range</function>の例</title> + <programlisting role="php"> +<![CDATA[ +foreach(range(0, 9) as $number) { + echo $number; +} +foreach(range('a', 'z') as $letter) { + echo $letter; +} +foreach(range('z', 'a') as $letter) { + echo $letter; +} +]]> + </programlisting> + </example> + <note> + <para> + 4.1.0より前のバージョンでは、<function>range</function>関数は、 + +昇順の整数配列のみを生成しました。文字シーケンス及び降順の配列 + のサポートが4.1.0で追加されました。 + </para> + <example> + +<title>デクリメントする範囲及び文字シーケンスの模擬</title> + <programlisting role="php"> +<![CDATA[ +# 範囲の順番を反転するためにarray_reverseを使用可能 +foreach(array_reverse(range(0,9)) as $number) { + echo $number; +} + +# chr()を用いて整数を文字に変換するためにarray_map()を使用可能 +foreach(array_map('chr', range(ord('a'),ord('z'))) as $character) { + echo $character; +} +]]> + </programlisting> + </example> + </note> <para> - 使用例については、<function>shuffle</function>を参照下さい。 + +その他の使用例については、<function>shuffle</function>を参照下さい。 </para> </refsect1> </refentry> @@ -2770,12 +3152,8 @@ <function>reset</function>は、配列の最初の要素の値を返します。 </para> <para> - <function>current</function>, - <function>each</function>, - <function>next</function> - <function>prev</function>, - <function>reset</function> - も参照下さい。 + <function>current</function>, <function>each</function>, + <function>next</function>, <function>prev</function>も参照下さい。 </para> </refsect1> </refentry> @@ -2803,21 +3181,33 @@ <example> <title><function>rsort</function>の例</title> <programlisting role="php"> +<![CDATA[ $fruits = array ("lemon", "orange", "banana", "apple"); rsort ($fruits); -reset($fruits); -while(list($key,$val)=each($fruits)) { - echo "$key -> $val\n"; +reset ($fruits); +while (list ($key, $val) = each ($fruits)) { + echo "$key = $val\n"; } +]]> </programlisting> </example> - この例では以下のように表示します。 - <computeroutput> -fruits[0] = orange -fruits[1] = lemon -fruits[2] = banana -fruits[3] = apple - </computeroutput> + </para> + <para> + この例の出力は以下のようになります。 + </para> + <para> + <informalexample> + <programlisting> +<![CDATA[ +0 = orange +1 = lemon +2 = banana +3 = apple +]]> + </programlisting> + </informalexample> + </para> + <para> fruitsはアルファベットの逆順にソートされました。 </para> <para> @@ -2853,21 +3243,21 @@ <example> <title><function>shuffle</function>の例</title> <programlisting role="php"> +<![CDATA[ $numbers = range (1,20); -srand ((double)microtime()*1000000); +srand ((float)microtime()*1000000); shuffle ($numbers); -while (list(, $number) = each ($numbers)) { +while (list (, $number) = each ($numbers)) { echo "$number "; } +]]> </programlisting> </example> </para> <para> <function>arsort</function>,<function>asort</function>, <function>ksort</function>,<function>rsort</function>, - <function>natsort</function>, <function>natcasesort</function>, - <function>sort</function>,<function>usort</function>, - <function>uksort</function>も参照下さい。 + <function>sort</function>,<function>usort</function>も参照下さい。 </para> </refsect1> </refentry> @@ -2919,29 +3309,33 @@ <example> <title><function>sort</function>の例</title> <programlisting role="php"> -<?php +<![CDATA[ +<?php $fruits = array ("lemon", "orange", "banana", "apple"); sort ($fruits); reset ($fruits); -while (list ($key,$val) = each ($fruits)) { - echo "fruits[".$key."] = ".$val; +while (list ($key, $val) = each ($fruits)) { + echo "fruits[".$key."] = ".$val."\n"; } - -?> + +?> +]]> </programlisting> </example> </para> <para> - この例では以下のように表示します。 + この例の出力は以下のようになります。 </para> <para> <informalexample> <programlisting> +<![CDATA[ fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange +]]> </programlisting> </informalexample> </para> @@ -3013,6 +3407,7 @@ 参照下さい。 </para> </note> + ¬e.func-callback; <para> <function>usort</function>, <function>uksort</function>, <function>sort</function>, <function>asort</function>, @@ -3043,10 +3438,11 @@ この関数は、ユーザー定義の比較関数を用いて配列のキーをソートします。 ソートしたい配列を複雑な基準でソートする必要がある場合には、 この関数を使う必要があります。 - - <example> - <title><function>uksort</function>の例</title> - <programlisting role="php"> + </para> + <example> + <title><function>uksort</function>の例</title> + <programlisting role="php"> +<![CDATA[ function cmp ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; @@ -3059,21 +3455,30 @@ while (list ($key, $value) = each ($a)) { echo "$key: $value\n"; } - </programlisting> - </example> +]]> + </programlisting> + </example> + <para> この例による出力は以下のようになります。 - <computeroutput> + </para> + <para> + <informalexample> + <programlisting> +<![CDATA[ 20: twenty 10: ten 4: four 3: three - </computeroutput> +]]> + </programlisting> + </informalexample> </para> + ¬e.func-callback; <para> <function>usort</function>, <function>uasort</function>, <function>sort</function>, <function>asort</function>, <function>arsort</function>, <function>ksort</function>, - <function>rsort</function>, <function>natsort</function> + <function>natsort</function>, <function>rsort</function> も参照下さい。 </para> </refsect1> @@ -3092,7 +3497,7 @@ <funcprototype> <funcdef>void <function>usort</function></funcdef> <paramdef>array <parameter>array</parameter></paramdef> - <paramdef>function <parameter>cmp_function</parameter></paramdef> + <paramdef>string <parameter>cmp_function</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -3101,13 +3506,20 @@ この関数を使用するべきです。 </para> <para> - 比較関数は、最初の引数が二番目の引数より小さいか等しいか大きい場合に - それぞれゼロ未満、ゼロに等しい、ゼロより大きい整数を返します。二つの - メンバーの?較結果が等しいとなった場合、ソートされた配列の順番は定義 - されません。 + +比較関数は、最初の引数が2番目の引数より小さいか、等しいか、大きい + +場合に、それぞれゼロ未満、ゼロに等しい、ゼロより大きい整数を返す + +必要があります。2つのメンバーの比較結果が等しいとなった場合、 + ソートされた配列の順番は定義されません。 + </para> + <para> + +比較関数としてあるオブジェクトのメンバー関数を使用することも可能です。 + 以下の例3を参照下さい。 + </para> + <para> <example> <title><function>usort</function>の例</title> <programlisting role="php"> +<![CDATA[ function cmp ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; @@ -3120,6 +3532,7 @@ while (list ($key, $value) = each ($a)) { echo "$key: $value\n"; } +]]> </programlisting> </example> </para> @@ -3129,24 +3542,27 @@ <para> <informalexample> <programlisting> +<![CDATA[ 0: 6 1: 5 2: 3 3: 2 4: 1 +]]> </programlisting> </informalexample> </para> <note> <para> もちろん、このような簡単な例では<function>rsort</function>関数 - の方がよォiしfいます。 + の方がより適当です。 </para> </note> <para> <example> <title>多次元配列を使用する<function>usort</function>の例</title> <programlisting role="php"> +<![CDATA[ function cmp ($a, $b) { return strcmp($a["fruit"],$b["fruit"]); } @@ -3160,6 +3576,7 @@ while (list ($key, $value) = each ($fruits)) { echo "\$fruits[$key]: " . $value["fruit"] . "\n"; } +]]> </programlisting> </example> </para> @@ -3173,26 +3590,76 @@ <para> <informalexample> <programlisting> +<![CDATA[ $fruits[0]: apples $fruits[1]: grapes $fruits[2]: lemons +]]> </programlisting> </informalexample> </para> <para> - <warning> - <para> - (Solarisシステムのような)いくつかのCライブラリに含まれる - quicksort関数は、比較関数が適当な値を返さない場合にPHPをクラッ - シュさせる可能性があります。 - </para> - </warning> + <example> + <title> + +<function>usort</function>でオブジェクトのメンバ関数を使用する例 + </title> + <programlisting role="php"> +<![CDATA[ +class TestObj { + var $name; + + function TestObj($name) + { + $this->name = $name; + } + + /* 静的な比較関数: */ + function cmp_obj($a, $b) + { + $al = strtolower($a->name); + $bl = strtolower($b->name); + if ($al == $bl) return 0; + return ($al > $bl) ? +1 : -1; + } +} + +$a[] = new TestObj("c"); +$a[] = new TestObj("b"); +$a[] = new TestObj("d"); + +uasort($a, array ("TestObj", "cmp_obj")); + +foreach ($a as $item) { + print $item->name."\n"; +} +]]> + </programlisting> + </example> + </para> + <para> + この例の出力は以下のようになります。 + </para> + <para> + <informalexample> + <programlisting> +b +c +d + </programlisting> + </informalexample> </para> + <warning> + <para> + (Solarisシステムのような)いくつかのCライブラリに含まれる + +quicksort関数は、比較関数が適当な値を返さない場合にPHPをクラッ + シュさせる可能性があります。 + </para> + </warning> <para> <function>uasort</function>, <function>uksort</function>, <function>sort</function>, <function>asort</function>, <function>arsort</function>, <function>ksort</function>, - <function>rsort</function>, <function>natsort</function> + <function>natsort</function>, <function>rsort</function> も参照下さい。 </para> </refsect1>