Diskuze: Jak na funkci Find ze C#
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Jen ze zajímavosti - proč přepisovat z C# do PHP?
Napisal som teraz nieco na podobny styl, ako si spravil ty, a mne to funguje uplne v pohode. Podobnym sposobom mozes implementovat aj funkcie Last a dalsie. Ak mas nejake otazky pytaj sa.
<?php
// Testing array.
$array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
/**
* Returns array of all items in specified input array that matches specified
* predicate.
*
* @param $array input array
* @param callable $predicate predicate
* @return array array of items from input array that matches specified predicate
*/
function FindAll($array, Callable $predicate) {
$results = array();
foreach ($array as $item) {
if ($predicate($item)) {
$results[] = $item;
}
}
return $results;
}
/**
* Returns first item from input array that matches specified predicate or null if
* there was no item that matched specified predicate in the input array.
*
* @param $array input array
* @param callable $predicate predicate
* @return mixed|null item or null if no item was found
*/
function First($array, Callable $predicate) {
foreach ($array as $item) {
if ($predicate($item)) {
return $item;
}
}
return null;
}
// Test funkcionality.
$parne = function ($item) {
return ($item % 2) == 0;
};
var_dump(First($array, $parne));
var_dump(FindAll($array, $parne));
var_dump(FindAll($array, function ($item) {
return ($item % 2) != 0;
}));
Output z phpcka:
php predicate.php
int(2)
array(5) {
[0]=>
int(2)
[1]=>
int(4)
[2]=>
int(6)
[3]=>
int(8)
[4]=>
int(10)
}
array(5) {
[0]=>
int(1)
[1]=>
int(3)
[2]=>
int(5)
[3]=>
int(7)
[4]=>
int(9)
}
php -version
PHP 5.6.10 (cli) (built: Jun 10 2015 15:58:53)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
Ja by som teda asi ale doporucil napisanie interfacu List a implementacie ArrayList, aby tie funckie niekam partili a neboli v global scope.
a nepostačí ti obyčejná http://php.net/…y-filter.php ?
array_filter(players, function (x) { return x.IsAlive; });
Nejprve jsem si to testoval a C# mě byl příjemnější, protože PHP sem se teprv k tomu musel naučit abych to přepsal
Asi ano, ale problém je, pokud mám toto:
public function Test($parametr)
{
array_filter($players, function($x) { return $x->Promenna == $parametr; });
}
Tak toto nefunguje, protože v té funkci v array_filtr není $parametr vidět. Ale toto použití docela vyžaduji, abych byl schopný ve funkci porovnávat hodnoty co mám jako parametry
Abych jen doplnil, tak ty funkce co jsem si napsal fungují, jen už zbývá ten problém, jak sem popsal teď nad tímhle postem. Jak dostat do callback funkce nějaký parametr
Jinak díky všem, za dosavadní pomoc
Ps: Po úpravě od dobrakmato
Díky.
poprípade môžeš použiť tento package https://github.com/…nate/support (Collections)
je to vlastne port z frameworku laravel
dokumentáciu nájdeš tu http://laravel.com/…/collections#…
Pokud chceš používat externí parametry v anonymní funkci, musíš použít klíčové slovo use:
public function Test($parametr)
{
array_filter($players, function($x) use ($parametr) { return $x->Promenna == $parametr; });
}
Díky moc Tukmak a dobrakmato vaše řešení dohromady konečně vytvoří řešení přesně takové jaké jsem hledal
Opravdu moc děkuji všem ve vláknu za pomoc.
Zobrazeno 12 zpráv z 12.