PHP使用array_filter查找二维数组中符合指定字段和字段值的数据集合

方法:

/**
     * 获取符合字段和字段值的数组集合
     * @param array $data 待过滤数组
     * @param string $field 要查找的字段
     * @param $value 要查找的字段值
     * @return array 返回所有符合要求的数组集合
     */
    public static function arrayFilterFieldValue(array $data, string $field, $value)
    {
        $data = array_filter($data, function ($row) use ($field, $value) {
            if (isset($row[$field])) {
                return $row[$field] == $value;
            }
        });
        return $data;
    }

2、示例,查找下面二维数组中name为“张三”的所有数据,原数组如下:

 3、调用方式如下:

$arr = [
    [
        'id' => 1,
        'name' => '张三',
    ], [
        'id' => 2,
        'name' => '李四',
    ], [
        'id' => 3,
        'name' => '王五',
    ], [
        'id' => 4,
        'name' => '马六',
    ], [
        'id' => 5,
        'name' => '张三',
    ], [
        'id' => 6,
        'name' => '张三',
    ], [
        'id' => 6,
        'name' => '李四',
    ],
];
$data = Helper::arrayFilterFieldValue($arr, 'name', '张三');

4、打印$data结果如下:

 5、相关函数:

array_filter():用回调函数过滤数组中的单元。

 

### 将数据转换为二维数组方法 在前端开发过程中,尤其是在使用 Vue.js 进行项目构建时,有时需要将一维对象数组或其他形式的数据结构转换为二维数组来满足特定的显示或处理需求。以下是几种常见的方式来进行这样的转换。 #### 方法一:基于时间分组的一维对象数组转二维对象数组 当目标是从一维对象数组中提取并按某一属性(如时间)进行分类重组时,可以采用如下方式: ```javascript function groupByTime(dataArray, key) { const groupedData = {}; dataArray.forEach(item => { let timeKey = item[key]; if (!groupedData[timeKey]) { groupedData[timeKey] = []; } groupedData[timeKey].push(item); }); return Object.keys(groupedData).map(key => ({ [key]: groupedData[key] })); } ``` 此函数接收两个参数:`dataArray` 是待处理的一维对象数组;`key` 表示用于分组的时间字段名称[^1]。 #### 方法二:通用的一维数组到多维数组的转换 对于更一般的场景下的一维数组向多维数组转变的需求,则可以根据具体逻辑编写相应的映射规则。这里给出一个简单的例子,它不局限于任何框架内使用: ```javascript function convertToMultiDimensional(array, dimensionSize) { var result = []; while (array.length > 0) { result.push(array.splice(0, dimensionSize)); } return result; } // 使用示例 let oneDArray = ['a', 'b', 'c', 'd']; console.log(convertToMultiDimensional(oneDArray, 2)); // 输出 [[ "a", "b" ], ["c", "d"]] ``` 这段代码定义了一个 `convertToMultiDimensional()` 函数,该函数接受原始的一维数组以及希望每行列有多少项作为输入,并据此创建新的二维数组[^4]。 #### 方法三:利用 JavaScript 的内置方法 如果目的是简单地改变现有数组的形式而不涉及复杂的业务逻辑,那么可以直接运用 JavaScript 提供的一些工具函数,例如 `reduce()`, `filter()`, `concat()` 来完成任务。下面是一个实例说明如何通过这些方法组合起来达到目的: ```javascript const flattenAndReorganize = array => array.reduce((acc, currValue) => acc.concat(currValue), []); // 假设有一个嵌套了一层深的二维数组 let nestedArrays = [ [{ id: 1 }, { id: 2 }], [{ id: 3 }] ]; // 执行扁平化操作后再重新组织成所需的格式 let reorganizedArray = flattenAndReorganize(nestedArrays); console.log(reorganizedArray); // 结果将是 [{id: 1}, {id: 2}, {id: 3}] ``` 这种方法适用于由后端返回的数据已经是以某种层次结构存在的场合,此时只需要将其展平即可得到想要的结果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值