PHP Conference Japan 2024

array_values

(PHP 4, PHP 5, PHP 7, PHP 8)

array_values傳回陣列的所有值

說明

array_values(陣列 $array): 陣列

array_values() 會從 array 傳回所有值,並以數字索引重新索引陣列。

參數

array

該陣列。

傳回值

傳回值的索引陣列。

範例

範例 #1 array_values() 範例

<?php
$array
= array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>

以上範例會輸出:

Array
(
    [0] => XL
    [1] => gold
)

另請參閱

  • array_keys() - 返回陣列中所有的鍵名或其中一部分
  • array_combine() - 使用一個陣列的值作為鍵名,另一個陣列的值作為值,建立一個新的陣列

新增筆記

使用者貢獻的筆記 6 則筆記

122
biziclop at vipmail dot hu
10 年前
記住,array_values() 會忽略您精美的數字索引,它會根據 'foreach' 的順序重新編號。

<?php
$a
= array(
3 => 11,
1 => 22,
2 => 33,
);
$a[0] = 44;

print_r( array_values( $a ));
==>
Array(
[
0] => 11
[1] => 22
[2] => 33
[3] => 44
)
?>
24
nopy at users dot sourceforge dot net
21 年前
提醒您,使用 array_values() 重新索引陣列可能會導致您意外地達到記憶體限制。

例如,如果您的 PHP memory_limit 設定為 8MB,
並且有一個大型陣列 $bigArray 分配了 5MB 的記憶體。

執行以下程式碼將導致 PHP 超出記憶體限制:

<?php
$bigArray
= array_values( $bigArray );
?>

這是因為 array_values() 並沒有直接重新索引 $bigArray,
而是將其重新索引到另一個陣列中,然後再將其指派給自身。
19
abimaelrc
13 年前
這是另一種從多維陣列中獲取值的方法,適用於 php >= 5.3.x 的版本。
<?php
/**
* 從多維陣列中獲取特定鍵的所有值
*
* @param $key string 鍵名
* @param $arr array 陣列
* @return null|string|array 回傳值,可能為 null、字串或陣列
*/
function array_value_recursive($key, array $arr){
$val = array();
array_walk_recursive($arr, function($v, $k) use($key, &$val){
if(
$k == $key) array_push($val, $v);
});
return
count($val) > 1 ? $val : array_pop($val);
}

$arr = array(
'foo' => 'foo',
'bar' => array(
'baz' => 'baz',
'candy' => 'candy',
'vegetable' => array(
'carrot' => 'carrot',
)
),
'vegetable' => array(
'carrot' => 'carrot2',
),
'fruits' => 'fruits',
);

var_dump(array_value_recursive('carrot', $arr)); // array(2) { [0]=> string(6) "carrot" [1]=> string(7) "carrot2" }
var_dump(array_value_recursive('apple', $arr)); // null
var_dump(array_value_recursive('baz', $arr)); // string(3) "baz"
var_dump(array_value_recursive('candy', $arr)); // string(5) "candy"
var_dump(array_value_recursive('pear', $arr)); // null
?>
6
bluej100 at gmail dot com
17 年前
大多數 array_flatten 函式不允許保留鍵。我的函式允許保留、不保留和僅保留字串(預設)。

<?
// 遞迴式地將多維陣列縮減為單維陣列
// $preserve_keys: (0=>永不保留, 1=>保留字串鍵, 2=>總是保留)
function array_flatten($array, $preserve_keys = 1, &$newArray = Array()) {
foreach ($array as $key => $child) {
if (is_array($child)) {
$newArray =& array_flatten($child, $preserve_keys, $newArray);
} elseif ($preserve_keys + is_string($key) > 1) {
$newArray[$key] = $child;
} else {
$newArray[] = $child;
}
}
return $newArray;
}

// 測試

$array = Array(
'A' => Array(
1 => 'foo',
2 => Array(
'a' => 'bar',
)
),
),

'C' => 'qux'

);
);

echo 'var_dump($array);'."\n";
var_dump($array);
echo 'var_dump(array_flatten($array, 0));'."\n";
var_dump(array_flatten($array, 0));
echo 'var_dump(array_flatten($array, 1));'."\n";
var_dump(array_flatten($array, 1));
echo 'var_dump(array_flatten($array, 2));'."\n";
var_dump(array_flatten($array, 2));
?>

0
chrysb at gmail dot com
16 年前
如果您正在尋找一種方法來計算特定值在陣列中出現的總次數,請使用此函式

<?php
function array_value_count ($match, $array)
{
$count = 0;

foreach (
$array as $key => $value)
{
if (
$value == $match)
{
$count++;
}
}

return
$count;
}
?>

這真的應該成為 PHP 的內建函式。
-3
匿名
20 年前
<?php
/**
將任意深度的多維陣列扁平化
成其純量值的列表
(對於大型結構可能效率低下)
(將在自參考結構上無限遞迴)
(可以擴展以處理物件)
*/
function array_values_recursive($ary)
{
$lst = array();
foreach(
array_keys($ary) as $k ){
$v = $ary[$k];
if (
is_scalar($v)) {
$lst[] = $v;
} elseif (
is_array($v)) {
$lst = array_merge( $lst,
array_values_recursive($v)
);
}
}
return
$lst;
}
?>

編碼到天亮! -mark meves!
To Top