بي أتش بي:تطبيق دالة على متغيرات متعددة دون استخدام مصفوفة

StackOverflow https://stackoverflow.com/questions/417373

  •  03-07-2019
  •  | 
  •  

سؤال

لدي وظيفة (للسهولة، سأستخدم فقط count()) أريد تطبيقها على 4-5 متغيرات مختلفة.حاليًا، أفعل هذا:

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

هل هناك طريقة أفضل؟أعلم أن المصفوفات يمكنها استخدام الدالة array_map، ولكني أريد أن تظل القيم كقيم منفصلة، ​​بدلاً من القيم الموجودة داخل المصفوفة.

شكرًا.

هل كانت مفيدة؟

المحلول

أعلم أنك قلت أنك لا تريد أن تكون القيم في مصفوفة، ولكن ماذا عن إنشاء مصفوفة خصيصًا للتكرار عبر القيم؟أي.:

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

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

لست متأكدًا مما إذا كان هذا حقًا أكثر ترتيبًا من الطريقة الأصلية.

نصائح أخرى

إذا كان لديك مجموعة من المتغيرات المتكررة لجمع البيانات، فإن التعليمات البرمجية الخاصة بك سيئة التصميم ويجب أن تستخدم فقط مصفوفة لتخزين القيم، بدلاً من عشرات المتغيرات.لذلك ربما تريد شيئًا مثل:

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

ثم تقوم ببساطة بإضافة عنصر الصفيف الخاص بك (على سبيل المثال من حلقة زمنية من SQL الخاص بك أو أي شيء تفعله)

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

ولكن إذا كنت تريد حقًا السير في هذا الطريق، فيمكنك استخدام الأدوات المقدمة لك، وإذا كنت تريد القيام بذلك بمجموعة كبيرة، فإن المصفوفة تعد خيارًا جيدًا.ثم ابحث عن المصفوفة واستخدم المتغيرات المتغيرة، كما يلي:

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

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

ما قاله بن وترافيسو، ولكن استخدم array_walk للحصول على رمز أنظف قليلا:

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

يمكنك استخدام الاستخراج لاستعادة القيم مرة أخرى.

//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";

كيف يمكنك قياس "أفضل"؟قد تكون قادرًا على التوصل إلى شيء ذكي وأقصر، ولكن ما لديك يبدو أنه من الأسهل فهمه، وهو الوظيفة 1.سأترك الأمر كما هو، لكن سأخصصه لمتغيرات جديدة (على سبيل المثال.$sum_a، ...).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top