$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);
问问题
635 次
4 回答
2
如果要将任何相似的键相乘,则需要获取键列表。 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。
于 2010-11-05T19:23:09.917 回答
1
为此,您可以使用 array_map 并滥用 bcmul:
array_map( 'bcmul', $a, $b ) == $a * $b
于 2011-02-28T01:36:41.243 回答
0
3D Captcha有你想要的。不过,您可能需要对其进行一些错误检查。
于 2010-11-05T19:10:56.223 回答
0
您必须使用库或自己定义交叉产品:
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]);
}
同样,您必须创建自己的函数,并且您应该进行一些错误检查,以防值未定义。
于 2010-11-05T18:59:53.830 回答