I am here to tell you your entire design is all wrong or to be kind sub-optimal. It works, but you can do better.
First you want to choose a voltage that matches the net LED voltage with perhaps 10% for the current limiting or more for battery tolerances which are typically 10% for most of their capacity range so that would be 20% more at most.
It seems you have 5V and 9V to choose from, so if these are all 2V LEDs ( which also have a tolerance which once was 50% and today is more like 5% from reputable hi-brightness sources for most of the parts at "rated" current ( not absolute max current)
The current gain on transistors also has a huge manufacturing tolerance and also a large variability with current, but you don't have to achieve perfect Vce(sat) or the rated saturation at Ic/Ib=10 because if you choose Ic/Ib=20 it just means Vce is slightly larger than 0.1V or whatever it is which is only 1% of your 9V range so no sweat there. You might even get good results with Ic/Ib= 50 and still be under 0.5V for these current levels because the "rated transistor Vce(sat)/Ic"is resistance and is around 1 to 2 ohms for the PN2222A and 3 to 5 ohms for other common switches. Take the 2N2904 for example at Ic=30 mA Ic/Ib=50 means Ib= 2% or 0.6mA intersects at 0.3 V drop on the switch (Vce) which at 30 mA is only
9 mW, so that's a cool 0.3V/30mA = 10 ohm switch. So at 20 mA,
it's even cooler ,but for TEN (10) LEDs in parallel from 9V, you have a problem with efficiency and waste heat.
The LED also has a bulk resistance that lowers with a rising current near the rated value which is due to the size of the chip (and thus power limit) and the thermal insulation of the epoxy. For instance, the 2V 20 mA LEDs are in the ballpark of 8~10 Ohms and the 3V 20 mA White LEDS are around 12~16 Ohms rated near 65 mW. This variation in bulk resistance is the
only reason for the tolerances in LED Vf .
Fortunately, this is easily corrected by using making better choices of matching supply voltage to LED voltages.
e.g. (1) Using 5V only 2S ( two in series) with Ic/Ib=30 leaves about 800 mV for the current limiting resistor /20mA = 40 ohms ( or nearest 1% value) then have 5 circuits in parallel or 5P to have an array of 2S5P with a total load current of now 5P * 20 mA = 100 mA and a base current of 3.3% *Ic or Ic/Ib=30 is not only 3.3 mA which is trivial using 4.3V drop = 1.3k.
(2) using 9V makes 4S2P possible for 8 LEDs leaving 0.8V drop across the resistor at 20 mA = 40 ohms or nearest.
or if you really need 10 LEDs using 9V choose 4S2P + 2S with different R for the 2S
There are of course many other solutions some with active current limiters vs. the passive resistor which is the theme to this answer. How to recognize the bulk linear resistance in EVERY part.
Especially in non-linear devices like transistors as switches and LEDs which follow exponential diode law and choose an optimal array for better efficiency. Think of Vce(sat) as the condition where Vbc goes from being a reverse-biased diode to a forward-conducting diode across Vce which when not saturated is a high-impedance current sink. So that Vce is the difference voltage of the bulk resistances of Vbc and Vbe which by design are different-sized diode junctions created to amplify base current, but as the Vbc junction conducts more in the forward region the linear current gain gets shunted to nearly 10% of its maximum hFE gain by this property. But if you can tolerate a slightly higher resistance than the rated Vce(sat)/Ic @ Ic/Ib = x then you can easily scale x but you can never be saturated as a switch AND use all the worst-case linear current gain specified. so it is a trade-off.
Using Nigel's fave BC337, we see options for binned ranges which span from 100 to 600 and suffix letters at slight added cost and Vce(sat)/Ic = 700 mV (max) / 500 mA = 1.2 Ohms which is good and rises to 8 ohms using 2% base current @ Ic= 10 mA