【问题标题】:How to SUM items that I don´t know the name?如何对我不知道名称的项目求和?
【发布时间】:2019-07-25 17:24:08
【问题描述】:

我的 Laravel 应用程序上有这个 return $request。这段代码正是来自'return $request;'命令。

这是来自控制器

public function index(Request $request)
    {
    return $request; 
} 

这是 view.blade 上的打印。它与您的完全不同:

$jsonList = '{ 
    "_method": "POST",
    "_token": null,
    "cliente": "2",
    "nrocpfCnpj": "00635344000177",
    "originalSegmento": "4",
    "example_length": "10",
    "cota853": "12975",
    "cota835": "11945",
    "cota209": "12110",
    "cota501": "12110"
}

还有我的:

{
    "_method": "POST",
    "_token": null,
    "cliente": "2",
    "nrocpfCnpj": "00635344000177",
    "originalSegmento": "4",
    "example_length": "10",
    "cota853": "12975",
    "cota835": "11945",
    "cota209": "12110",
    "cota501": "12110"
    }

我需要对每个 cota 求和,但它总是可变的,所以我永远不会得到名字,所以我可以做数学。 你们会怎么做呢?

有什么提示吗? 提前致谢!

【问题讨论】:

  • 以下示例将解决您的问题
  • 给出的示例可以解决您的问题,如果没有解决,请在您的帖子中提供更多信息以获得更好的响应。
  • 你放弃了吗???
  • 不行,看看我自己的回答!我应该检查自己的答案来关闭它吗?

标签: php laravel sum


【解决方案1】:

如果你知道钥匙的一部分

$json = '{
"_method": "POST",
"_token": null,
"cliente": "2",
"nrocpfCnpj": "00635344000177",
"originalSegmento": "4",
"example_length": "10",
"cota853": "12975",
"cota835": "11945",
"cota209": "12110",
"cota501": "12110"
}';
$data = json_decode($json,true);

$keyPart = 'cota';

$filtered = array_filter($data, function($k) use($keyPart) {
    return strpos($k,$keyPart) === 0;
}, ARRAY_FILTER_USE_KEY);
//[
//  'cota853' => "12975"
//  'cota835' => "11945"
//  'cota209' => "12110"
//  'cota501' => "12110"
//]

$sum = array_sum($filtered);
//49140

【讨论】:

  • 那么你的 json 无效
  • @MarcelloPatto 尝试查找错误php.net/manual/en/function.json-last-error.php
  • @Konorlevich 和伙计们。你所有的答案现在都有效。但我的总数不同。它返回 49993 显然是错误的。而且我使用的是相同的数字!可能是什么?
  • @MarcelloPatto 你能调试过滤和计算吗?
  • 它正在工作。我正在传递一个名为 cota 的参数(不知道为什么,真的),它指望 SUM。
【解决方案2】:

根据key过滤数组,然后求和:

$sum = array_sum(array_filter($request, function($k) {
                                            return strpos($k, 'cota') === 0;
                                        }, ARRAY_FILTER_USE_KEY);

【讨论】:

    【解决方案3】:

    类似于@potiev 的答案,但使用 strpos 而不是正则表达式。 strpos() 返回字符串开始的偏移量,或者布尔值 false。

    $json = '{
        "_method": "POST",
        "_token": null,
        "cliente": "2",
        "nrocpfCnpj": "00635344000177",
        "originalSegmento": "4",
        "example_length": "10",
        "cota853": "12975",
        "cota835": "11945",
        "cota209": "12110",
        "cota501": "12110"
    }';
    
    
    $data = json_decode($json, true);
    $sum = 0;
    
    foreach($data as $key => $value){
        if(strpos($key, 'cota') !== false){
            $sum = $sum + $value; 
        }
    }
    
    echo $sum;
    

    【讨论】:

    • 它给了我这个错误:```为foreach()提供的参数无效```
    • 确保您的 json 数据被正确解码。经过测试并为我工作。
    【解决方案4】:

    使用array_walk 和正则表达式来选择带有单词cota 的键

    $data = $request->all();
    
    $sum = 0;
    
    array_walk($data, function ($item, $key) use (&$sum){
        if (preg_match('/^cota*/', $key) === 1) {
            $sum += $item;
        }    
    });
    
    echo $sum;
    

    【讨论】:

    • 嗨@potiev,感谢您的帮助,但它没有用。 ``` array_walk() 期望参数 1 是数组,给定 null ```
    • 是的,但对我不起作用!这是为什么?总是得到这个错误:ErrorException (E_WARNING) array_walk() expects parameter 1 to be array, null given
    【解决方案5】:

    我发现了错误。

    $data = $request->all();
            $keyPart = 'cota';
            $filtered = array_filter($data, function ($k) use ($keyPart) {
                return strpos($k, $keyPart) === 0;
            }, ARRAY_FILTER_USE_KEY);
            return $filtered;
    

    返回:

    {
    "cota": "853",
    "cota853": "12975",
    "cota835": "11945",
    "cota209": "12110",
    "cota501": "12110"
    }
    

    所以,我传递了一个名为 cota 的键,值为 853。这没有错,但不需要总和。所以我不会再通过了。

    谢谢你们!

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 2010-12-03
      • 1970-01-01
      • 2010-10-15
      • 2016-09-18
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多