Php 将数组与数组_multiply()相乘将返回一个空数组

Php 将数组与数组_multiply()相乘将返回一个空数组,php,arrays,multiplication,Php,Arrays,Multiplication,我试图将两个数组相乘(价格和用户输入的数量) if(isset($_POST['submit'])) { unset($_POST['submit']); $r=array(); $userqty=array(); $userqty=$_POST; function array_multiply($userqty, $fullbox) { if (!is_array($userqty) || !is_array($fullbox)) { exit(

我试图将两个数组相乘(价格和用户输入的数量)

if(isset($_POST['submit']))
{

unset($_POST['submit']);
$r=array(); 
$userqty=array();
$userqty=$_POST;    

    function array_multiply($userqty, $fullbox) {

    if (!is_array($userqty) || !is_array($fullbox)) {
        exit('Needs to be an array.');
    }

    $c1 = count($userqty);
    $c2 = count($fullbox);

    if ($c1 != $c2) {
        exit('$setOne and $setTwo must be the same length.');
    }

    for ($i = 0; $i < $c1; $i++) {
        $r[$i] = $userqty[$i] * $fullbox[$i];
    }

    return $r;

}
var_dump($fullbox);
echo '<br>';
echo '<br>';
var_dump($userqty);
echo '<br>';
echo '<br>';
var_dump($r);
}
if(isset($\u POST['submit']))
{
未设置($_POST['submit']);
$r=数组();
$userqty=array();
$userqty=$\u POST;
函数数组\u乘法($userqty,$fullbox){
如果(!is_数组($userqty)| |!is_数组($fullbox)){
退出('需要是一个数组');
}
$c1=计数($userqty);
$c2=计数($fullbox);
如果($c1!=$c2){
退出(“$setOne和$setTwo必须具有相同的长度。”);
}
对于($i=0;$i<$c1;$i++){
$r[$i]=$userqty[$i]*$fullbox[$i];
}
返回$r;
}
var_dump($fullbox);
回声“
”; 回声“
”; 变量转储($userqty); 回声“
”; 回声“
”; var_dump($r); }
当我在最后进行数组转储时,我看到我的值在数组中是正确的,除了结果数组的值是array(0){}时,它应该具有与我原来的两个相同的数字或条目。提前感谢。

这里有很多问题

  • $r
    是一个局部变量。请将其设为全局变量(不要),或者只使用返回值
  • 您实际上并没有调用该函数
  • 您不会声明
    $r
    ,即使它是为您隐式声明的
快速解决方案:

var_dump(array_multiply($userqty, $fullbox));
彻底重写:

function array_multiply($a, $b) {
    $len = count($a);

    if($len !== count($b)) {
        throw new LengthException('The two arguments to array_multiply should have the same length.');
    }

    $result = array();

    for($i = 0; $i < $len; $i++) {
        $result[] = $a[$i] * $b[$i];
    }

    return $result;
}
函数数组\u乘法($a,$b){
$len=计数($a);
如果($len!==计数($b)){
抛出新的LengthException('array_multiply的两个参数应该具有相同的长度');
}
$result=array();
对于($i=0;$i<$len;$i++){
$result[]=$a[$i]*$b[$i];
}
返回$result;
}

而且也不要只传入
$\u POST
。那会很麻烦。

愚蠢的问题-你似乎根本没有调用你的函数…加上变量范围规则-你在函数外部初始化你的
$r
数组-它在你的函数内部不会可见,除非你将它设置为
全局的
,加上什么ewsi说-你没有调用你的函数。这个问题并不愚蠢-即使这是问题的原因,我们都会犯错。@Djacksway-你为什么要将
userqty
声明为空数组,然后在下一行立即覆盖它?@Utkanos我想我必须将变量声明为数组,以便将其设置为空数组与我从表单中获得的$_post数组相同。不-您不需要在PHP中对变量进行任何准备工作。一个赋值会覆盖另一个赋值。删除原始的
array()
赋值不会产生任何效果。
$fullbox
似乎也不会初始化。