php 关联数组 下标,array_map 等php回调函数使用问题(关联数组下标获取)

本文介绍了如何利用PHP的array_reduce和array_map函数来处理数组,特别是在处理一维索引和二维关联数组时的技巧。在array_reduce中,通过外部变量获取元素索引,用于生成HTML选项标签。而在array_map中,通过传递关联数组的键来获取并打印每个元素的键值。此外,还展示了如何将商品规格信息处理为适合批量添加的结构,提高了代码的简洁性和可读性。
摘要由CSDN通过智能技术生成

前言:我自己用此类回调函数,来替代 foreach 纯粹是用为代码的简洁性,让代码更好看。(我有点代码小洁癖~)

1、array_reduce

当迭代处理一个一维索引数组时,在回调函数内是无法获取到当时元素索引的。所以想要获取时,需得借助一个外部变量。

目的:把 $arr 遍历到 标签内(就是拼接option字符串)

$arr = [

0 => '全部',

1 => 'a',

2 => 'b',

3 => 'c',

];

解决:

$index = 0;

$options = array_reduce($data, function($carry, $item) use (&$index){

## $index则为当前两个元素 $item 的索引

return $carry . '' . $item . '';

}, '');

var_dump($options);

输出为

全部abc

2、array_map(callable $callback , array $array1 [, array $... ] )

很多情况下,迭代的数据一般为一个 二维关联数组,但 array_map 本身在回调函数的函数体内无法获取到 关联数组的下标 的。

目的:在回调体内获取迭代关联数组的下标值。

解决:可以把关联数组的下标通过 array_map()的第三个形参把下标传进去。

$arr = [

'a' => 1,

'b' => 2,

'c' => 3

];

$res = array_map(function($item, $key){

echo '$arr[' . $key . ']=' . $item . '
';

}, $arr, array_keys($arr));

输出结果为

$arr[a]=1

$arr[b]=2

$arr[c]=3

题外话,有个典型的应用,也可以这样用。打个比方,如入库商品。

## 接受商品的基本信息与规格信息

$arr = $_GET;

print_r($arr);

/*

Array

(

[goods] => 辣条

[spec] => Array

(

['attr'] => Array

(

[0] => 颜色

[1] => 口感

[2] => 副作用

)

['value'] => Array

(

[0] => 红色

[1] => 辣

[2] => The `菊花` is hot

)

)

)

*/

## 处理规格信息,使其可以批量添加

$arr['spec'] = array_map(function($item, $key){

return [

'attr' => $key,

'value' => $item,

];

}, $arr['spec']['value'], $arr['spec']['attr']);

print_r($arr);

/*

Array

(

[goods] => 辣条

[spec] => Array

(

[0] => Array

(

[attr] => 颜色

[value] => 红色

)

[1] => Array

(

[attr] => 口感

[value] => 辣

)

[2] => Array

(

[attr] => 副作用

[value] => The `菊花` is hot

)

)

)

*/

# 这样处理好数组就特别方便,数组中 `商品的规格` 的就可以批量添加了

参考资料:

laravel框架代码 - 集合 的封装 -> 传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用`Array.prototype.map()`方法和`Array.prototype.filter()`方法结合使用来过滤数组并返回符合条件元素的下标。下面是一个示例代码: ```javascript const arr = [10, 20, 30, 40, 50]; const filteredIndexes = arr.map((element, index) => ({ element, index })) .filter(({ element }) => element > 30) .map(({ index }) => index); console.log(filteredIndexes); // [3, 4] ``` 首先使用`map()`方法将每个元素和其下标打包成一个对象,然后使用`filter()`方法过滤出大于30的元素,最后使用`map()`方法仅返回符合条件的元素下标。 这里使用了箭头函数和对象解构语法,需要注意的是,`map()`和`filter()`方法返回的都是新数组,不会修改原数组。 ### 回答2: 在JavaScript中,可以使用`filter`方法过滤数组并返回下标。 `filter`方法是Array对象的内置方法之一,它接受一个回调函数作为参数,该回调函数会在数组的每个元素上执行,并根据返回值来决定是否保留该元素。 要返回下标,可以在回调函数使用第二个参数`index`来获取当前元素在数组中的索引。假设我们有一个数组`arr`,我们想要过滤出满足某个条件的元素,并返回对应的下标数组,可以像下面这样使用`filter`方法: ```javascript const arr = [1, 2, 3, 4, 5]; const filteredIndices = arr.filter((el, index) => { // 过滤条件,这里只保留奇数元素 return el % 2 === 1; }).map((el, index) => { // 返回元素下标 return index; }); console.log(filteredIndices); // 输出 [0, 2, 4] ``` 在上面的代码中,我们使用`filter`方法过滤出了数组中的奇数元素(回调函数返回值为`true`),然后使用`map`方法将每个元素的下标保存到新的数组`filteredIndices`中。最后,我们可以通过`console.log`输出结果。 使用`filter`过滤数组并返回下标的主要思路就是利用`filter`方法的回调函数中的第二个参数`index`来追踪元素的索引位置。根据不同的判断条件可以过滤出我们需要的元素,并将对应的下标保存起来。 ### 回答3: 在JavaScript中,可以使用Array的filter方法来过滤数组元素。然而,filter方法默认只返回满足条件的元素值,而不是它们在数组中的下标。如果我们想返回满足条件的元素在数组中的下标,可以使用forEach方法来实现。 首先创建一个空数组,用于保存满足条件的元素的下标。然后使用forEach方法遍历数组,对每个元素进行条件判断。如果满足条件,将当前元素的下标添加到新数组中。最后返回新数组即可。 以下是一个例子: ```javascript function filterIndexes(arr, condition) { let indexes = []; arr.forEach(function(element, index) { if (condition(element)) { indexes.push(index); } }); return indexes; } let arr = [1, 2, 3, 4, 5]; let filteredIndexes = filterIndexes(arr, function(element) { return element % 2 === 0; // 过滤出偶数元素的下标 }); console.log(filteredIndexes); // 输出 [1, 3] ``` 在上述例子中,我们定义了一个名为filterIndexes的函数,它接受两个参数:一个数组arr和一个条件condition。通过调用filterIndexes函数并传入一个条件函数,我们可以获得满足条件的元素的下标数组。在这个例子中,我们过滤出了数组中的偶数元素的下标,并将结果打印到控制台上。 希望上述回答对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值