$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 值,因此回圈它,并進行陣列搜索以找到該值。
uj5u.com熱心網友回復:
<?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 串列中。
uj5u.com熱心網友回復:
幾個欄位應該是唯一的情況的解決方案。這里的唯一意味著所有欄位的內容必須匹配。輸入陣列本身減少了。
$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 類。有了這個類,解決方案如下所示:
$all_category = TableArray::create($userarray)
->filterUnique(['extraid'])
->fetchAll()
;
使用該類時,保留輸入陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359772.html
上一篇:按降序對陣列的數字進行排序
