如何在多维数组中找到具有特定值的第一个元素?

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()
;

使用类时,输入数组被保留。

【讨论】:

以上是关于如何在多维数组中找到具有特定值的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

GO语言切片Slice数组Array的比较;利用多维切片接受EXCEL内容的输出

python怎么操作多维数组元素

如何找到多维数组的模式?

过滤和排序具有多个值的多维数组

从多维数组中提取特定元素

相异矩阵中具有缺失值的多维缩放