v2.5.2
Giriş yap

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

r00t
201 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
14 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
26 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);