Stok akaryakıt olunca epey kafa karıştırıcı olmuş.

Verdiğiniz örnek üzerinden gidersek; biri 25.000 Kg, diğeri 15.000 Kg olmak üzere iki giriş kaydı var. İki girişin de fiyatları farklı. 30.000 Kg'lık bir çıkış yapılacak. Tek bir çıkış yapacağınızı, bunu da 2 farklı fiyat üzerinden hesaplayarak yapmak istediğinizi yazmışsınız ancak fiyatlar farklı olduğu için 2 farklı çıkış yapmak (10.58'lik ayrı, 10.90'lık ayrı) daha mantıklı gibi görünüyor. İleride çıkış tablosunda yapacağınız hiçbir hesabı tutturamazsınız. Ayrıca giriş-çıkış tablo yapınıza bakılırsa, ilişkili başka bir tablo daha kullanıyor olmanız lazım ancak belirtmemişsiniz; o yüzden her çıkıştan sonra giriş kaydındaki stok değerini güncellediğinizi varsayıyorum. Çıkış yapılacak ürün 30.000 litre Mazot olsun. Kurguladığınız yapı üzerinden ben şu şekilde bir yol izlerdim;

Önce cinsi Mazot olan ve aktif olarak stokta mevcut olan kayıtları getirir, daha sonra dizi içinde gezinirdim;

$stokListesi = SELECT * FROM AkaryakitGirdi WHERE stokDurumu = ? AND cinsi = ?
Mevcut stok durumunu nasıl hesaplıyorsunuz bilmiyorum, sql sorgusunu örnek olarak yazdım.
$cikilanKg         = 30000; // Çıkılacak miktar
$stoktakiToplamKg  = array_sum(array_column($stokListesi, 'kilogram')); // Stoktaki toplam miktar
$etkilenenKayitlar = []; // Etkilenen kayıtların yazılacağı dizi

// Yeterli miktar yoksa
if ($cikilanKg > $stoktakiToplamKg) {

    // İşlemler

// Yeterli miktar varsa
} else {

    foreach ($stokListesi as $stok) {

        $stokYeterliMi = ($stok->kilogram > $cikilanKg);
    
        if (!$stokYeterliMi)
            $cikilanKg -= $stok->kilogram;

        $etkilenenKayitlar[] = [
            'kayitId'     => $stok->id,
            'birimFiyat'  => $stok->birim_fiyat,
            'cikilanKg'   => ($stokYeterliMi ? $cikilanKg : $stok->kilogram),
            'kalanKg'     => ($stokYeterliMi ? ($stok->kilogram - $cikilanKg) : 0),
            'toplamTutar' => ($stok->birim_fiyat * ($stokYeterliMi ? $cikilanKg : $stok->kilogram)),
            'stokTukendi' => !$stokYeterliMi
        ];

        if ($stokYeterliMi) break;
    }
}
$etkilenenSatirlar dizisi şöyle döner;
Array
(
    [0] => Array
    (
        [kayitId ] => 1
        [birimFiyat] => 10.58
        [cikilanKg] => 25000
        [kalanKg] => 0
        [toplamTutar] => 264500
        [stokTukendi] => 1
    )

    [1] => Array
    (
        [kayitId] => 2
        [birimFiyat] => 10.90
        [cikilanKg] => 5000
        [kalanKg] => 10000
        [toplamTutar] => 54500
        [stokTukendi] =>
    )
)

// Stoktan çıkış işlemleri
foreach ($etkilenenKayitlar as $kayit) {

    // AkaryakitCikti tablosuna yeni çıkışlar ekle veya mevcut stok durumunu değiştir

}
Yalnızca stok miktarı tükenen kayıtlara ulaşmak için;
// Stoğu biten kayıtlar
$stoguBitenKayitlar = array_filter($etkilenenKayitlar, function($stok) {
    return $stok['stokTukendi'];
});
Yine de toplam tutara ihtiyaç varsa;
// Toplam Tutar
$toplamTutar = array_reduce($etkilenenKayitlar, function($prev, $current) {
    $prev += $current['toplamTutar'];
    return $prev;
});
Kolay gelsin.