如何在多维数组中找到具有特定值的第一个元素?
Posted
技术标签:
【中文标题】如何在多维数组中找到具有特定值的第一个元素?【英文标题】:How to find the first element with a specific value in multidimansional array? 【发布时间】:2021-12-28 03:40:01 【问题描述】:$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 值,因此循环它,并进行数组搜索以找到该值。
【问题讨论】:
到目前为止你有什么尝试? @DownloadPizza 尝试在 foreach 中使用 if 条件获取值,但没有任何好处。 @TyphixDev 你能发布这个 foreach 和 if 条件代码吗? @bassxzero$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;
这个 all_category 是另一个数组,其中存在相应的 extraid 值,因此循环它,并进行数组搜索以找到该值。
@TyphixDev 用代码更新问题。请不要将其添加为评论。
【参考方案1】:
<?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 列表中。
【讨论】:
哇,你太棒了!!!!我明白了【参考方案2】:解决多个字段应该唯一的情况。这里的唯一意味着所有字段的内容必须匹配。输入数组本身被缩减。
$fieldNames = ['extraid'];
$filterCols = [];
$flipFields = array_flip($fieldNames);
foreach($userarray as $key => $row)
$fieldsFromRow = array_intersect_key($row,$flipFields);
if(in_array($fieldsFromRow, $filterCols))
unset($userarray[$key]);
else
$filterCols[] = $fieldsFromRow;
$userarray = array_values($userarray);
代码来自TableArray class。使用此类,解决方案如下所示:
$all_category = TableArray::create($userarray)
->filterUnique(['extraid'])
->fetchAll()
;
使用类时,输入数组被保留。
【讨论】:
以上是关于如何在多维数组中找到具有特定值的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章