كيف تتكاثر قيم الصفيف الرقمية للمفاتيح المماثلة في PHP؟
-
29-09-2019 - |
سؤال
$a = array ('x' => 2, 'y' => 3);
$b = array ( 'y' => 2, 'z' => 3);
// $c = $a * $b;
// i would like to have
// $c = array ('x' => 0, 'y' => 6, 'z' => 0);
المحلول
إذا كنت تريد الضرب أي مفاتيح مماثلة معًا ، ستحتاج إلى الحصول على قائمة بالمفاتيح.array_keys يبدو أن مجرد وظيفة لذلك.
function foo($a, $b)
{
foreach(array_keys($a) as $i)
{
if(array_key_exists($i, $b){ // exists in a and b
$result[$i] = $a[$i]*$b[$i];
}else{ // exists and a but not b
$result[$i] = 0;
}
}
foreach(array_keys($b) as $i)
{
if(not array_key_exists($i, $a){ //exists in b but not i a
$result[$i] = 0;
}
}
return $result
}
هذا سيعمل (نأمل) على أي مجموعة من المفاتيح التي تسلمها ، وليس فقط X و Y و Z.
نصائح أخرى
يمكنك استخدام array_map وإساءة معاملة bcmul لهذا الغرض:
array_map( 'bcmul', $a, $b ) == $a * $b
سيكون عليك استخدام مكتبة أو تحديد المنتج المتقاطع بنفسك:
function cross_product($a, $b)
{
return array( $a['y'] * $b['z'] - $a['z'] * $b['y'], ...
}
http://en.wikipedia.org/wiki/cross_product
بعد مزيد من الفحص لما تفعله ، يبدو أنك ترغب في شيء على غرار:
function multiply_arr($a, $b)
{
return array($a['x'] * $b['x'], $a['y'] * $b['y'], $a['z'] * $b['z]);
}
مرة أخرى ، سيتعين عليك وضع وظيفتك الخاصة ، ويجب عليك القيام ببعض التحقق من الأخطاء في حالة عدم تعريف القيمة.
3D Captcha لديه ما تبحث عنه. قد تحتاج إلى القيام ببعض التحقق من الأخطاء على الرغم من ذلك.
لا تنتمي إلى StackOverflow