v2.5.2
Giriş yap

PHP ile array'i istediğim sırada (sort order) yapmak?

r00t
337 defa görüntülendi

Elimde API'den gelen bir data var. Ancak ben gelen datayı kendi istediğim sırayla yeniden order etmek istiyorum.
örneğin;
gelen array içerisinde

[
  {
    "type": "dollar",
    "team_A_value": 35.75,
  },
  {
    "type": "euro",
    "team_A_value": 33.12,
  },
  {
    "type": "try",
    "team_A_value": "0.52,
  },
  ...
  ...

gibi giden bir data geldiğini düşünelim.
benim burada yapmak istediğim ise şu olacak;

$sortArray = ["try","dollar"];

çıktı istediğim sonuç ise, ben $sortArray değişkenimde "try" ve "dollar" sıralaması ile dataları getir dedim; ancak bunun dışında kalan "euro" veya diğer değerleri getirme.
"Sadece benim seçtiklerimi, benim belirttiğim sıra ile getir" demek istiyorum kısacası.

Nasıl yapabilirim?

Cevap yaz
Cevaplar (2)
emmir2
223 gün önce
<?php
$gelen_veri = [
  [
    "type" => "dollar",
    "team_A_value" => 35.75,
  ],
  [
    "type" => "euro",
    "team_A_value" => 33.12,
  ],
  [
    "type" => "try",
    "team_A_value" => 0.52,
  ],
];

$sortArray = ["try","dollar"];

function customSort($a, $b) {
    global $sortArray;
    $a_index = array_search($a['type'], $sortArray);
    $b_index = array_search($b['type'], $sortArray);
    return $a_index - $b_index;
}
usort($gelen_veri, 'customSort');
print_r($gelen_veri);
?>
eminkurt
235 gün önce
    $data = [
  ["type" => "dollar", "team_A_value" => 35.75],
  ["type" => "euro", "team_A_value" => 33.12],
  ["type" => "try", "team_A_value" => 0.52],
  // Diğer elemanlar...
];

$sortArray = ["try", "dollar"];

// Sadece $sortArray içinde belirtilen tipleri içeren öğeleri filtrele
$filteredData = array_filter($data, function ($item) use ($sortArray) {
    return in_array($item['type'], $sortArray);
});

// $sortArray'e göre sırala
usort($filteredData, function ($a, $b) use ($sortArray) {
    $positionA = array_search($a['type'], $sortArray);
    $positionB = array_search($b['type'], $sortArray);
    return $positionA - $positionB;
});

print_r($filteredData);