$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; } }En esta matriz, necesito obtener cada primer elemento de extraid. es decir, si extraid = 2, aquí hay 3 elementos, así que necesito obtener la primera matriz. Si extraid = 3, entonces hay 2 matrices allí, y necesito buscar la primera matriz, y así sucesivamente.
esta categoría all_category es otra matriz en la que están presentes los valores de extraid correspondientes, por lo que hizo un bucle e hizo una búsqueda de matriz para encontrar el valor.
<?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);Solución para el caso de que varios campos deban ser únicos. Único aquí significa que el contenido de todos los campos debe coincidir. La propia matriz de entrada se reduce.
$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);El código proviene de la clase TableArray . Con esta clase, la solución se ve así:
$all_category = TableArray::create($userarray) ->filterUnique(['extraid']) ->fetchAll() ;Al usar la clase, la matriz de entrada se conserva.