I have an Array that looks like this:
array(
0 => array(
'key1' => 'a',
'key2' => 'b',
'key3' => 'c'
),
1 => array(
'key1' => 'c',
'key2' => 'b',
'key3' => 'a'
),
...
)
Ben tuşları sadece bir (değişken) numarasını, yani reduce_array (array ('anahtarı1', 'key3')) içeren bir dizi almak için bir işlev gerekir; dönmelidir:
array(
0 => array(
'key1' => 'a',
'key3' => 'c'
),
1 => array(
'key1' => 'c',
'key3' => 'a'
),
...
)
Bunu yapmanın en kolay yolu nedir? Mümkünse benim arkadaşları gibi array_filter veya array_map gibi herhangi bir ek yardımcı fonksiyonu olmadan zaten çok fonksiyonlarını kullanarak benim hakkımda şikayetçi.
O varlığı için kontrol etmek için gerekli değil bu yüzden kaynak dizi her zaman verilen anahtarları olacaktır.
Bonus puan değerleri (tuşları her zaman anahtarı1 değeri varsa bir sonra diğer anahtar (lar) her zaman değer b olacaktır anlamı, birbirleriyle ilişkili olacak) benzersiz olup olmadığını.
Ama işler benim şimdiki çözüm (hatta isim korkunç ama daha iyi bir bulamıyorum) oldukça sakar:
function get_unique_values_from_array_by_keys(array $array, array $keys)
{
$result = array();
$found = array();
if (count($keys) > 0)
{
foreach ($array as $item)
{
if (in_array($item[$keys[0]], $found)) continue;
array_push($found, $item[$keys[0]]);
$result_item = array();
foreach ($keys as $key)
{
$result_item[$key] = $item[$key];
}
array_push($result, $result_item);
}
}
return $result;
}
Addition:
PHP Version is 5.1.6.