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