比较两个php数组和第三个php数组

比较两个php数组和第三个php数组,php,arrays,Php,Arrays,我有两个阵列显示了今年的结果 array A ( [a] => '150' [b] => '200' [c] => '300' [d] => '1000' [e] => '350' [f] => '1000' ) array B ( [a] => '500' [b] => '400' [d] => '1000' [f] => '1000' ) 我需要比较构建另一个数组的两个数组之间的增长结果,以在html表中显示它。例

我有两个阵列显示了今年的结果

array A (   
[a] => '150'  
[b] => '200'
[c] => '300'
[d] => '1000'
[e] => '350'
[f] => '1000'
)

array B (
[a] => '500'  
[b] => '400'
[d] => '1000'
[f] => '1000'
)
我需要比较构建另一个数组的两个数组之间的增长结果,以在html表中显示它。例:

[a] => 233%  
[b] => 100%
...
我有一个数组来标识数组b上不存在的索引。 数组c=('c','e')


问题是,我需要C行和E行仍然显示在表上。但是在迭代过程中,我怎么能用这个值为0的索引跳转,避免计算300乘0,而是放一条消息呢?

你可以迭代第一个数组,然后检查下一个数组的值:

$arrayA = [
    'a' => '150', 
    'b' => '200',
    'c' => '300',
    'd' => '1000',
    'e' => '350',
    'f' => '1000',
];

$arrayB = [
    'a' => '500', 
    'b' => '400',
    'd' => '1000',
    'f' => '1000',
];

$result = [];
foreach ($arrayA as $key => $value) {
    if(isset($arrayB[$key])) {
        $result[$key] = round($arrayB[$key] * 100 / $value, 2);
    } else {
        $result[$key] = 'some value when empty';
    }
}

var_dump($result);
输出:

array(6) {
  ["a"]=>
  float(333.33)
  ["b"]=>
  float(200)
  ["c"]=>
  string(21) "some value when empty"
  ["d"]=>
  float(100)
  ["e"]=>
  string(21) "some value when empty"
  ["f"]=>
  float(100)
}
Array
(
    [a] => 233
    [b] => 100
    [c] => missing key in one of the two arrays
    [d] => 0
    [e] => missing key in one of the two arrays
    [f] => 0
)

您可以迭代第一个数组并检查下一个数组的值:

$arrayA = [
    'a' => '150', 
    'b' => '200',
    'c' => '300',
    'd' => '1000',
    'e' => '350',
    'f' => '1000',
];

$arrayB = [
    'a' => '500', 
    'b' => '400',
    'd' => '1000',
    'f' => '1000',
];

$result = [];
foreach ($arrayA as $key => $value) {
    if(isset($arrayB[$key])) {
        $result[$key] = round($arrayB[$key] * 100 / $value, 2);
    } else {
        $result[$key] = 'some value when empty';
    }
}

var_dump($result);
输出:

array(6) {
  ["a"]=>
  float(333.33)
  ["b"]=>
  float(200)
  ["c"]=>
  string(21) "some value when empty"
  ["d"]=>
  float(100)
  ["e"]=>
  string(21) "some value when empty"
  ["f"]=>
  float(100)
}
Array
(
    [a] => 233
    [b] => 100
    [c] => missing key in one of the two arrays
    [d] => 0
    [e] => missing key in one of the two arrays
    [f] => 0
)

您可以循环遍历数组A,并使用检查数组B中是否存在数组A的键,然后计算增长百分比:

$arrayA = [
    'a' => '150',
    'b' => '200',
    'c' => '300',
    'd' => '1000',
    'e' => '350',
    'f' => '1000'
];

$arrayB = [
    'a' => '500',
    'b' => '400',
    'd' => '1000',
    'f' => '1000'
];

$arrayC = [];

foreach($arrayA as $keyA => $valueA) {
    if (array_key_exists($keyA, $arrayB)) {
        $arrayC[$keyA] = floor((($arrayB[$keyA] - $valueA) / $valueA ) * 100) . "%";
        continue;
    }
    $arrayC[$keyA] = "No match";
}
结果

Array
(
    [a] => 233%
    [b] => 100%
    [c] => No match
    [d] => 0%
    [e] => No match
    [f] => 0%
)

您可以循环遍历数组A,并使用检查数组B中是否存在数组A的键,然后计算增长百分比:

$arrayA = [
    'a' => '150',
    'b' => '200',
    'c' => '300',
    'd' => '1000',
    'e' => '350',
    'f' => '1000'
];

$arrayB = [
    'a' => '500',
    'b' => '400',
    'd' => '1000',
    'f' => '1000'
];

$arrayC = [];

foreach($arrayA as $keyA => $valueA) {
    if (array_key_exists($keyA, $arrayB)) {
        $arrayC[$keyA] = floor((($arrayB[$keyA] - $valueA) / $valueA ) * 100) . "%";
        continue;
    }
    $arrayC[$keyA] = "No match";
}
结果

Array
(
    [a] => 233%
    [b] => 100%
    [c] => No match
    [d] => 0%
    [e] => No match
    [f] => 0%
)

如果您想要一个更灵活的解决方案,您可以检查两个数组的两个值(即,不要将比较键基于单个数组),并可以将其扩展到两个以上的数组(这可能对其他没有相同目标的人有用)

使用
array\u keys
获取两个数组的键,并使用
array\u unique
以避免重复的键值

<?php
$array_a = [  
    'a' => 150,
    'b' => 200,
    'c' => 300,
    'd' => 1000,
    'e' => 350,
    'f' => 1000
];

$array_b = [
    'a' => 500, 
    'b' => 400,
    'd' => 1000,
    'f' => 1000
];

$keys_a = array_keys($array_a);
$keys_b = array_keys($array_b);

$keys = array_unique(array_merge($keys_a, $keys_b));

$result = [];
foreach ($keys as $key)
{
    if (isset($array_a[$key]) && isset($array_b[$key]))
    {
        $result[$key] = round((($array_b[$key] - $array_a[$key]) / $array_a[$key]) * 100);
    }
    else
    {
        $result[$key] = "missing key in one of the two arrays";
    }
}

如果您想要一个更灵活的解决方案,其中可以检查两个数组的两个值(即,不要将比较键基于单个数组),并且可以将其扩展到两个以上的数组(这可能对其他没有相同目标的人有用)

使用
array\u keys
获取两个数组的键,并使用
array\u unique
以避免重复的键值

<?php
$array_a = [  
    'a' => 150,
    'b' => 200,
    'c' => 300,
    'd' => 1000,
    'e' => 350,
    'f' => 1000
];

$array_b = [
    'a' => 500, 
    'b' => 400,
    'd' => 1000,
    'f' => 1000
];

$keys_a = array_keys($array_a);
$keys_b = array_keys($array_b);

$keys = array_unique(array_merge($keys_a, $keys_b));

$result = [];
foreach ($keys as $key)
{
    if (isset($array_a[$key]) && isset($array_b[$key]))
    {
        $result[$key] = round((($array_b[$key] - $array_a[$key]) / $array_a[$key]) * 100);
    }
    else
    {
        $result[$key] = "missing key in one of the two arrays";
    }
}

在许多方面,您是否尝试过使用while循环并实现一个条件来比较一个数组值与具有相同索引键的另一个数组值?1。编写一个函数,将这两个数组作为参数,循环遍历它们,并返回
$a[x]/$b[x]
2的原始结果数组。编写用于获取此数组的显示逻辑,并根据要定义的规则将其转换为HTML。3.请记住,除法的结果是浮点数,您无法可靠地比较浮点数是否相等。4.
如果(abs($c[x]<.00001){echo'它是零…ish';}
或者任何你认为可以接受的适当的小分数。实际上我写错了。问题是,索引c和E在数组B中不存在,我将更新postdodes“数组A”始终包含比较所需的所有键?@gomd实际上每年都会有很多不同的方式,您是否尝试过使用while循环并实现一个条件来比较一个数组值与具有相同索引键的另一个数组值?1.编写一个函数,将这两个数组作为参数,循环并返回r的数组aw(
$a[x]/$b[x]
2.编写您的显示逻辑,根据您想要定义的规则将此数组转换为HTML。3.记住除法的结果是浮点数,您无法可靠地比较浮点数是否相等。4.
如果(abs($c[x]<.00001){echo'它是零…ish';}
或任何你认为可以接受的适当小部分。实际上我写错了。问题是,索引C和E不存在于数组B中,我将更新PostDos“数组A”始终保留比较所需的所有关键点?@gomd事实上,它每年都会变化。它也起作用了,谢谢你的贡献和时间!它也起作用了,谢谢你的贡献和时间!