tipos - php array key value
Cómo obtener un valor único en una matriz multidimensional (7)
He revisado mucho el desbordamiento y en google, pero ninguno de los resultados funciona para mi caso específico.
Tengo una matriz de marcador de posición llamada $ holder, los valores son los siguientes:
Array (
[0] => Array (
[id] => 1
[pid] => 121
[uuid] => 1
)
[1] => Array (
[id] => 2
[pid] => 13
[uuid] => 1
)
[2] => Array (
[id] => 5
[pid] => 121
[uuid] => 1
)
)
Estoy tratando de extraer valores distintos / únicos de esta matriz multidimensional. El resultado final que deseo es una variable que contenga (13,121), o (preferiblemente) una matriz de la siguiente manera: Matriz ([0] => 13 [1] => 121)
Una vez más he intentado serializar y tal, pero no entiendo muy bien cómo funciona cuando se opera con una sola clave en cada matriz.
Traté de ser lo más claro posible. Espero que tenga sentido...
En php> = 5.5 puedes usar array_column :
array_unique(array_column($holder, ''pid''));
Hola, prueba el código que se proporciona a continuación para obtener valores únicos y luego ordena esos valores
<?php
$sort_arr = unique_sort($holder, ''pid'');
echo "<pre>";
print_r($sort_arr);
echo"</pre>";
/*function for get unique value then sort them*/
function unique_sort($arrs, $id) {
$unique_arr = array();
foreach ($arrs AS $arr) {
if (!in_array($arr[$id], $unique_arr)) {
$unique_arr[] = $arr[$id];
}
}
sort($unique_arr);
return $unique_arr;
}
Gracias
Para mi situación uso este método
//get some data from db to array
while ($row = mysqli_fetch_assoc($query)){
$data[] = $row;
}
//display unique value
echo "<table>";
$uniq = array();
foreach ($data as $row) {
if(!in_array($row[''path''], $uniq)) {
$uniq[] = $row[''path''];
echo "<tr>";
echo "<td>";
echo $row[''path''];
echo "</td>";
echo "<td>";
echo $row[''relationship_id''];
echo "</td>";
echo "</tr>";
}
}
echo "</table>";
Parece bastante simple: extraer todos los valores de pid
en su propia matriz, ejecutarlo a través de array_unique
:
$uniquePids = array_unique(array_map(function ($i) { return $i[''pid'']; }, $holder));
Lo mismo a mano dura:
$pids = array();
foreach ($holder as $h) {
$pids[] = $h[''pid''];
}
$uniquePids = array_unique($pids);
Solo itere sobre él y aplique un array_unique
en el resultado:
foreach($holder as $yourValues){
$pids[] = $yourValues[''pid''];
}
$yourUniquePids = array_unique($pids);
Suponiendo que su matriz se llama $ holder:
$unique = array();
foreach( $holder as $h )
if( ! in_array($h, $unique ) )
$unique[] = $h;
es una forma un poco más eficiente que vía array_unique, creo. Puede ser lo mismo
prueba esto
foreach($arr as $key => $val) {
$new_arr[] = $val[''pid''];
}
$uniq_arr = array_unique($new_arr);