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()只会作用于数组的最外层,而不会递归地遍历内部的子数组。如果需要获取多维数组中的所有值,需要额外处理。
假设我们有一个二维数组,其中包含多个子数组,我们希望从中提取所有的值:
<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