PHP: dizi kullanmadan birden çok değişken bir işlevi uygular

5 Cevap php

Ben belki 4-5 farklı değişkenlere uygulamak istediğiniz (kolaylığı için, ben sadece) (sayısı kullanacağız) bir işlevi var. Şu anda, ben bunu yapıyorum:

$a = count($a);
$b = count($b);
$c = count($c);
$d = count($d);

Daha iyi bir yolu var mı? Ben diziler array_map işlevini kullanabilirsiniz biliyorum, ama ben değerleri yerine, bir dizi iç değerleri, ayrı değerleri olarak kalmasını istiyorum.

Teşekkürler.

5 Cevap

Ben size değerler bir dizi olmak istemiyorum dedi biliyorum, ama nasıl sadece değerler döngü için özel bir dizi oluşturma hakkında? yani:

$arr = Array($a, $b, $c, $d);

foreach ($arr as &$var)
{
   $var = count($var);
}

Gerçekten özgün bir şekilde daha derli toplu olup olmadığını ben bile emin değilim.

Eğer kod kötü tasarlanmış ve sadece değerlerini depolamak için bir dizi kullanıyor olmalıdır, yerine değişkenlerin onlarca veri toplamak için değişkenleri yinelenen bir grup var. Bu yüzden belki de böyle bir şey istiyorum:

$totals = array("Visa"=>0,"Mastercard"=>0,"Discover"=>0,"AmericanExpress"=>0);

o zaman sadece (Sizin yaptığınız SQL veya ne olursa olsun bir süre döngü diyelim) senin dizi elemanı eklemek

$totals['Visa'] += $row['total'];

Eğer gerçekten bu rota aşağı gitmek istiyorum ama, sen büyük bir küme ile bu yapmak istiyorsanız daha sonra bir dizi iyi bir seçimdir, size verilen araçları kullanabilirsiniz. Ardından dizi foreach ve böylece gibi değişken değişkenlerini kullanabilirsiniz:

$variables = array('a','b','c'...);

foreach ( $variables as $var )
{
    ${$var} = count(${var});
}

Ben ve TravisO dedi, ancak kullanım array_walk Biraz temiz kod için neler:

$arr = Array($a, $b, $c, $d);
array_walk($arr, count);

Sen tekrar değerlerini almak için özü kullanabilirsiniz.

//test data
$a = range(1, rand(4,9));
$b = range(1, rand(4,9));
$c = range(1, rand(4,9));

//the code
$arr = array('a' => $a, 'b' => $b, 'c' => $c);
$arr = array_map('count', $arr);
extract($arr);

//whats the count now then?
echo "a is $a, b is $b and c is $c.\n";

Nasıl "iyi" ölçüyorsunuz? Sen zeki ve daha kısa bir şey ile gelmek mümkün olabilir, ama bu iş 1 olduğu, anlamak kolay gibi ne var gibi görünüyor. Ben bunu olduğu gibi bırakmak, ancak yeni değişkenlere atamak istiyorum olabilir (örneğin $ sum_a, .. .).