array_values()はPHPの組み込み関数であり、配列内のすべての値を返し、返された配列はキー名のない配列であり、すべてのキーが再インネックスされます(0から始まる)。
関数定義:
<span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array</span></span><span>) : </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
$ array :入力配列、 array_values()は、この配列のすべての値を返します。
返品値:元の配列内のすべての値を含む新しい配列、および元の配列のキー名は連続した数値(0から始まる)にリセットされます。
まず、通常の配列でarray_values()を使用する方法を示す簡単な例を見てみましょう。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
</span><span><span class="hljs-number">1</span></span><span> => </span><span><span class="hljs-string">'apple'</span></span><span>,
</span><span><span class="hljs-number">2</span></span><span> => </span><span><span class="hljs-string">'banana'</span></span><span>,
</span><span><span class="hljs-number">3</span></span><span> => </span><span><span class="hljs-string">'cherry'</span></span><span>
];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
出力結果:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => apple
[</span><span><span class="hljs-number">1</span></span><span>] => banana
[</span><span><span class="hljs-number">2</span></span><span>] => cherry
)
</span></span>
元の配列のキー名(1、2、3)が0、1、2にリセットされ、値が残っていることがわかります。
多次元配列の場合、 array_values()を使用して値を抽出することもできます。ただし、 array_values()は配列の最も外側の層にのみ作用し、内側のサブアレイを再帰的に横断することはないことに注意してください。多次元配列ですべての値を取得する必要がある場合は、追加の処理が必要です。
すべての値を抽出する複数のサブアレイを備えた2次元配列があるとします。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
</span><span><span class="hljs-string">"fruit"</span></span><span> => [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>],
</span><span><span class="hljs-string">"vegetable"</span></span><span> => [</span><span><span class="hljs-string">"carrot"</span></span><span>, </span><span><span class="hljs-string">"tomato"</span></span><span>],
</span><span><span class="hljs-string">"meat"</span></span><span> => [</span><span><span class="hljs-string">"chicken"</span></span><span>, </span><span><span class="hljs-string">"beef"</span></span><span>]
];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
出力結果:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => apple
[</span><span><span class="hljs-number">1</span></span><span>] => banana
)
[</span><span><span class="hljs-number">1</span></span><span>] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => carrot
[</span><span><span class="hljs-number">1</span></span><span>] => tomato
)
[</span><span><span class="hljs-number">2</span></span><span>] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => chicken
[</span><span><span class="hljs-number">1</span></span><span>] => beef
)
)
</span></span>
ご覧のとおり、 array_values()は外側の配列でのみ動作し、各サブアレイのコンテンツを変更しません。
キー名を保持せずに多次元配列ですべての値を取得したい場合は、再帰的に処理できます。これは、array_map()関数とarray_values()を組み合わせて使用することで実現できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">get_all_values</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$array</span></span></span><span>) {
</span><span><span class="hljs-variable">$values</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$values</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> &</span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)) {
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_all_values</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>); </span><span><span class="hljs-comment">// 再帰的に内部配列を処理します</span></span><span>
}
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$values</span></span><span>;
}
</span><span><span class="hljs-variable">$arr</span></span><span> = [
</span><span><span class="hljs-string">"fruit"</span></span><span> => [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>],
</span><span><span class="hljs-string">"vegetable"</span></span><span> => [</span><span><span class="hljs-string">"carrot"</span></span><span>, </span><span><span class="hljs-string">"tomato"</span></span><span>],
</span><span><span class="hljs-string">"meat"</span></span><span> => [</span><span><span class="hljs-string">"chicken"</span></span><span>, </span><span><span class="hljs-string">"beef"</span></span><span>]
];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_all_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
出力結果:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => apple
[</span><span><span class="hljs-number">1</span></span><span>] => banana
[</span><span><span class="hljs-number">2</span></span><span>] => carrot
[</span><span><span class="hljs-number">3</span></span><span>] => tomato
[</span><span><span class="hljs-number">4</span></span><span>] => chicken
[</span><span><span class="hljs-number">5</span></span><span>] => beef
)
</span></span>
再帰により、多次元配列からすべての値を正常に抽出し、平らなアレイを返します。
時には、多次元配列のすべての値を単一の配列にマージしたい場合があります。この場合、 array_values()は、 array_merge()と組み合わせて使用できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
</span><span><span class="hljs-string">"fruit"</span></span><span> => [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>],
</span><span><span class="hljs-string">"vegetable"</span></span><span> => [</span><span><span class="hljs-string">"carrot"</span></span><span>, </span><span><span class="hljs-string">"tomato"</span></span><span>],
</span><span><span class="hljs-string">"meat"</span></span><span> => [</span><span><span class="hljs-string">"chicken"</span></span><span>, </span><span><span class="hljs-string">"beef"</span></span><span>]
];
</span><span><span class="hljs-variable">$flattened</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</span></span><span>(
</span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'fruit'</span></span><span>]),
</span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'vegetable'</span></span><span>]),
</span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'meat'</span></span><span>])
);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flattened</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
出力結果:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => apple
[</span><span><span class="hljs-number">1</span></span><span>] => banana
[</span><span><span class="hljs-number">2</span></span><span>] => carrot
[</span><span><span class="hljs-number">3</span></span><span>] => tomato
[</span><span><span class="hljs-number">4</span></span><span>] => chicken
[</span><span><span class="hljs-number">5</span></span><span>] => beef
)
</span></span>
このようにして、複数のサブ番号を配列に組み合わせて、後続の処理を容易にすることができます。
array_values()は、特にすべての値を簡単に抽出できる多次元配列を扱う場合、非常に有用なPHP関数です。それ自体はすべてのサブアレイの値を再帰的に抽出することをサポートしていませんが、再帰関数を書いたり、他のPHP機能と組み合わせてこれを簡単に達成できます。
この記事が、特定の例を使用して、array_values()関数をよりよく理解し、使用するのに役立つことを願っています。
関連タグ:
array_values