Fórumok
Ami pythonban egyszerű szorzással megy, az php-ban némileg körülményes, mert itt nincs lehetőség pl. [3,4,5] * 2.4 használatára.
Ehelyett egy gyalogos (és nem elegáns) megoldás:
function m ($a,$c) {
$r=[];
foreach($a as $b){ $r[] = $b * $c; }
return $r;
}
print_r(m([1,4,5], 4.2));
[0] => 4.2
[1] => 16.8
[2] => 21
Ehelyett itt: https://riptutorial.com/php/example/26837/comparison-between-bcmath-and-float-arithmetic-operations javasolnak pár array_map-es megoldást, de olyat nem találtam, ahol meg lehet adni paraméterként is a szorzót.
A gond valahogy a láthatósággal van; ehelyett szeretnék egy működő (kétparaméteres) array_map megoldást, ami lehetőleg nem teszi be másik tömbként (többszörözve) a szorzót:
$input = [2,3,4];
$c = 3;
print_r( array_map(function($el) { return $el * $c; }, $input) );
Undefined variable: c
Hozzászólások
Az
array_map
-nek csak tömböket lehet átadni. Vagy úgy oldod meg, hogy a szorzót kiteszed globális változóba és azzal dolgozol a callback függvényben, vagy megírod magadnak a sajátarray_map
-edet, ami elfogad egy mezei változót második paraméternek és átadja a callback függvénynek.Vagy valami hasonló...
Oldschool Computer - http://oscomp.hu
Köszi, ez kiváló.
Nem válasz a kérdésre, de tulajdonképpen mi a baj azzal, ha a kódban az van, amit csinálni akarsz?
Csak szebben kell leírni:
function multiplyArrayByScalar ($array, $scalar) {
$result=[];
foreach($array as $actualElement){
$result[] = $actualElement * $scalar; }
return $result;
}
Igen, igazából nincs ezzel sem semmi baj. Csak a kívánt funkció annyira eleminek tűnt, hogy gyanús volt, hogy biztosan van erre valami hatékonyabb megoldás, amiben a ciklust nem ilyen prózai foreach-csel kell végigvinni. Az volt a sejtésem, hogy ennél lehet gyorsabb megoldás, ami valahogy a motorháztető alatt (esetleg párhuzamosítva) intézi az iterációt.
Arról nem is beszélve, hogy előbb-utóbb úgyis használja majd valaki ezt a tömböt, akinek dolga lesz végigmenni rajta, és akár ott is elvégezhető ez a szorzás...
Erre egy kicsit kibővítve, ha nem akarjuk a névteret teleszemetelni :)
Szerk.: átneveztem a függvényt, hogy jobb legyen a neve, array_times volt eredetileg, de az meh, mert csak ebben a kontextusban van köze az arrayekhez :)
BlackY
"Gyakran hasznos ugyanis, ha számlálni tudjuk, hányszor futott le már egy végtelenciklus." (haroldking)
@szz: Azért Python3-ban sem olyan egyszerű, ahogy írtad a témaindítóban:
>>> [3,4,5] * 3
[3, 4, 5, 3, 4, 5, 3, 4, 5]
Nézzük, hogyan lehet:
>>> input = [4, 5, 6]
>>> c = 3
>>> out = list(map(lambda x: x * c, input))
>>> print (out)
Mellékesen Rust esetén is a Pythonhoz hasonló, bár nekem a következetes iterátor logikája jobban kézreáll: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist…