php - 如何在多维数组中找到具有特定值的第一个元素?
问题描述
$userarray = array(
array(
'uid' => '100',
'extraid' => 2,
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'extraid' => 2,
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'extraid' => 2,
'name' => 'Michael',
'pic_square' => 'urlof40489'
),
array(
'uid' => '512',
'extraid' => 3,
'name' => 'Hillary',
'pic_square' => 'urlof409'
),
array(
'uid' => '792',
'extraid' => 3,
'name' => 'James',
'pic_square' => 'urlof489'
),
);
$all_category = $this->common->getAll(TABLE_CONF_CATEGORIES, 'year', $year);
foreach($all_category as $cats) {
$key = array_search($cats->id, array_column($userarray , 'extraid'));echo $key;
if($key) {
$userarray[$key]->category_name = $cats->category_name;
}
}
在这个数组中,我需要获取 extraid 的每个第一个元素。即如果extraid = 2,这里有3 个元素,所以我需要获取第一个数组。如果 extraid = 3,那么那里有 2 个数组,& 我需要获取第一个数组,等等。
此 all_category 是另一个数组,其中存在相应的 extraid 值,因此对其进行循环,并进行数组搜索以找到该值。
解决方案
<?php
$userarray = [
[
'uid' => '100',
'extraid' => 2,
'name' => 'Sandra Shush',
'pic_square' => 'urlof100',
],
[
'uid' => '5465',
'extraid' => 2,
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100',
],
[
'uid' => '40489',
'extraid' => 2,
'name' => 'Michael',
'pic_square' => 'urlof40489',
],
[
'uid' => '512',
'extraid' => 3,
'name' => 'Hillary',
'pic_square' => 'urlof409',
],
[
'uid' => '792',
'extraid' => 3,
'name' => 'James',
'pic_square' => 'urlof489',
],
];
// final output array
$all_category = [];
// list of already set ids
$ids = [];
foreach($userarray as $user) {
if( !isset($ids[$user['extraid']]) ){
$ids[$user['extraid']] = true;
$all_category[]= $user;
}
}
print_r($all_category);
- 循环遍历你的数组
- 检查 extraid 是否已经在您的数组中
- 如果是则移动到下一个数组元素
- 如果不是,则将其添加到最终输出数组中,并将 id 存储在我们已经看到的 id 列表中。
推荐阅读
- latex - 不等空间的乳胶方程
- javascript - 如何用jquery替换文本
- sql-server - 如何创建 SQL 数据库并在同一脚本中使用它?
- c - 通过引用类型或该类型的变量从定义中初始化变量
- qt - 如何保存 QT 应用程序的 UI 状态?
- postgresql - 在 PostgreSQL 中增加共享缓冲区的缺点是什么
- jupyter-notebook - `\require{mhchem}` 在 jupyter markdown 单元格中不起作用
- amazon-web-services - 如何使用 SLURM 停止计算节点?
- alloy - 删除合金中的谓词关系
- c# - 如果提供了无效域,则 HttpClient 或 WebClient 需要很长时间