PHP array_values

本文介绍 PHP 中 array_values() 函数的功能和用法,通过示例展示如何使用此函数来获取数组中的所有值,并重新创建数字索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

array_values() :

                      返回 input 数组中所有的值并给其建立数字索引。

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


上例将输出:

 

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

 

<think>我们有一个关于PHP代码片段的问题,特别是关于array_valuesarray_diff组合的用法。根据用户的问题,他们想要一个示例和解释。首先,我们需要理解这两个函数的作用:1.array_diff:用于比较两个(或更多)数组的值,并返回在第一个数组中但不在其他数组中的值。注意:它只比较值,不比较键。2.array_values:返回数组中所有的值(非键名)并给它们建立数字索引(从0开始)。组合使用:通常,我们可能会先使用array_diff得到两个数组的差集(结果是一个保留原键的数组),然后使用array_values重新索引这个差集数组(将键变为数字索引)。示例:假设我们有两个数组:$array1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");$array2=array("e"=>"red","f"=>"green","g"=>"black");如果我们计算array_diff($array1,$array2),我们会得到:array("c"=>"blue","d"=>"yellow")因为"red"和"green"在$array2中存在,所以被排除。注意:结果保留了原数组的键('c'和'd')。如果我们想要一个数字索引的数组(即不保留原键),我们可以使用array_values重新索引。所以:$diff=array_diff($array1,$array2);$result=array_values($diff);那么$result将是:array(0=>"blue",1=>"yellow")这样我们就得到了一个从0开始索引的数组。为什么需要这样做?有时候我们并不关心键,只想要一个索引数组(即数字索引的数组),特别是在需要连续索引的情况下,比如json编码后希望得到一个数组而不是对象(在JSON中,非数字索引的对象会被编码为对象)。另外,如果我们想要重新排列数组的索引(例如,去除某个键后重新编号),array_values就很有用。结合用户提供的引用,引用[1]和引用[2]提到了array_diff_assoc和array_diff,它们都涉及数组的差集,但注意array_diff_assoc同时比较键和值,而array_diff只比较值。我们的问题中只涉及array_diff(只比较值)和array_values。因此,我们给出一个具体的示例代码和解释:示例代码:```php<?php$array1=array("a"=>"apple","b"=>"banana","c"=>"cherry","d"=>"date");$array2=array("apple","date");//注意:这里我们使用索引数组,但array_diff只比较值//计算$array1中有而$array2中没有的值$diff=array_diff($array1,$array2);//此时$diff是:array('b'=>'banana','c'=>'cherry')//使用array_values重新索引$result=array_values($diff);//现在$result是:array(0=>'banana',1=>'cherry')print_r($result);?>```输出:Array([0]=>banana[1]=>cherry)所以,组合使用array_diff和array_values可以得到在第一个数组中出现但不在其他数组中出现的值,并且结果是一个从0开始索引的数组。注意:array_diff可以接受多个数组,比如array_diff($array1,$array2,$array3,...)。另外,用户提供的引用[4]和[5]是关于array_udiff_uassoc和array_udiff,它们是使用用户自定义函数进行比较的,这与我们当前的问题不直接相关,但原理类似。总结:组合用法:先使用array_diff计算出差集(保留原键),再使用array_values重置索引。使用场景:当我们只关心值的差异,并且希望结果是一个连续的索引数组时。相关问题:如果用户想要同时比较键和值,应该使用什么函数?(答案是array_diff_assoc或array_udiff_uassoc等)根据要求,我们需要生成相关问题:§§相关问题§§1.如何在保留键的情况下获取数组的差集?2.array_diff_assoc和array_diff有什么区别?3.如何同时比较多个数组的差集?4.如果我想自定义比较数组差集的方式(比如不区分大小写),应该使用哪个函数?</think> 下面是关于 PHP 中 `array_values()` 和 `array_diff()` 组合用法的详细解释和示例: ### 组合功能说明 1. **`array_diff()`**:比较多个数组的**值**,返回在第一个数组中存在但其他数组中不存在的元素(保留原始键名)[^2][^5] - `$array1` 中存在但 `$array2`, `$array3` 中不存在的元素 - **仅比较值**,键名不参与比较 - 返回值保留原始键名结构 2. **`array_values()`**:提取数组的所有值并**重置索引**为数字序列 - 移除原始键名并重建数字索引(0, 1, 2...) - 常用于需要连续数字索引的场景 ### 组合使用场景 当需要同时实现: - **值过滤**(获取特定数组中独有的值) - **索引重建**(生成连续数字索引的新数组) ### 使用示例 ```php <?php // 原始数组 $array1 = ["a" => "苹果", "b" => "香蕉", "c" => "橙子", "d" => "葡萄"]; $array2 = ["水果篮" => "苹果", "果盘" => "葡萄"]; // 1. 获取$array1中有但$array2中没有的值 $diff = array_diff($array1, $array2); /* 结果(保留键名): [ "b" => "香蕉", "c" => "橙子" ] */ // 2. 重置索引为数字序列 $result = array_values($diff); /* 最终结果: [ 0 => "香蕉", 1 => "橙子" ] */ ?> ``` ### 组合工作流程 1. **值过滤阶段** `array_diff($arr1, $arr2)` → 获取 `$arr1` 独有值并保留原键 ![array_diff图解](https://example.com/diff.png)[^1] 2. **索引重建阶段** `array_values()` → 丢弃键名生成新索引 ![array_values图解](https://example.com/values.png)[^3] ### 典型应用场景 1. **数据清洗**:过滤数据库结果中的特定值 ```php // 从用户选择中排除管理员指定项 $userSelection = [2, 5, 9]; $adminBlocked = [5, 7]; $validChoices = array_values(array_diff($userSelection, $adminBlocked)); // 结果:[0 => 2, 1 => 9] ``` 2. **API数据处理**:标准化输出格式 ```php // 原始数据含字符串键,API要求数字索引 $apiResponse = [ "success" => true, "data" => ["A" => "foo", "B" => "bar"] ]; $cleanData = array_values(array_diff( $apiResponse['data'], ["deleted_item"] )); // 输出: [0 => "foo", 1 => "bar"] ``` 3. **多维数组处理**(结合引用[3]的解包特性): ```php $source = [ ["id" => 1, "name" => "张三"], ["id" => 2, "name" => "李四"] ]; // 获取ID列表并排除特定值 $ids = array_column($source, "id"); // [0 => 1, 1 => 2] $filteredIds = array_values(array_diff($ids, [1])); // 结果: [0 => 2] ``` ### 注意事项 1. **键名处理**: `array_diff` 后键名保留原始结构,若需纯值列表必须使用 `array_values` 2. **性能优化**: 对大型数组优先使用索引数组(数字键),字符串键数组的差异计算较慢[^1] 3. **严格比较**: 值比较使用松散类型(`==`),数字`1`和字符串`"1"`会被视为相同,若需要严格比较可用 `array_udiff()`(如引用[4][5]) 4. **空数组处理**: 当所有值都被过滤时返回空数组 `[]`,而非 `null`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值