【问题标题】:Create variable inside/after if statement在 if 语句内部/之后创建变量
【发布时间】:2019-09-27 16:09:02
【问题描述】:

在带有键“字符串”和“值”的 JSON 中:

'Something xxx something' = 10
'Something yyy something' = 20
'Something xxx something' = 30
'Something zzz something' = 40

我想要的流程是:

find partial string inside string
if true
get sum of all its matched string's value
if false
return 0

我尝试的是

if (strpos($string, 'xxx') == false){
        $value = array_sum(array_column($arrayjson['string'],'value'));
        continue;
    }
echo $value

但是,我得到的是

100
100

预期结果是40

【问题讨论】:

标签: php if-statement


【解决方案1】:

问题在于,即使您检查字符串是否包含xxx(顺便说一句,您应该使用!== false,因为它可能返回0),然后您使用array_column() 提取所有值并添加它们全部加起来(这就是你得到 100 的原因)。

这会遍历数据并仅添加与所需字符串匹配的行...

$data = [ ['string' => 'Something xxx something', 'value' => 10],
    ['string' => 'Something yyy something', 'value'  => 20],
    ['string' => 'Something xxx something', 'value'  => 30],
    ['string' => 'Something zzz something', 'value'  => 40]];

$total = 0;
foreach ( $data as $row )   {
    if (strpos($row['string'], 'xxx') !== false){
        $total += $row['value'];
    }
}
echo $total;

【讨论】:

  • 谢谢你奈杰尔。实际上我之前偶然发现了foreach,但没有工作,因为我的if (strpos... 实际上在另一个for ($j = 0; $j < ... 循环函数中。但是您的解释使我对自己的错误有了更大的了解;用foreach 替换我的循环函数。再次感谢您。
【解决方案2】:

以更多的函数调用和轻微的效率下降为代价,您可以通过嵌套原生函数来避免使用临时变量。 (不过我会使用奈杰尔的方式)

代码:(Demo)

echo array_sum(
         array_column(
             array_filter(
                 $arrayjson,
                 function($row) {
                     return strpos($row['string'], 'xxx') !== false;
                 }
             ),
             'value'
         )
     );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多