【问题标题】:php traverses the array to get the corresponding valuephp遍历数组得到对应的值
【发布时间】:2021-06-04 16:17:45
【问题描述】:

我有两个变量,number 和 user,它们不是固定的。当我遍历下面的数组时,如何确定是否满足数量和用户条件以获取适当的 ID

示例:

如果amount的值为100,user的值为6,则得到的ID为1;

如果amount的值为50000,user的值为10,则得到的ID也是1;

如果amount的值为50000,user的值为12,则得到的ID也是2;

为什么我总是得到 1?

$amount = 10000;
$user = 12;
$id = null;
foreach ($array as $item) {
  if ($amount >= $item['value']['amount']['min'] && $user >= $item['value']['user']['min']) {
    $id = $item['id'];
    break;
  }
}
echo $id;

数组如下

$array = [
  [
    'id'    => 1,
    'value' => [
      'amount' => [
         'min' => 100,
         'max' => 9999 
       ],
      'user'   => [
         'min' => 5,
         'max' => 10 
       ],
      'ratio'  => 10
    ]
  ],
  [
    'id'    => 2,
    'value' => [
      'amount' => [
         'min' => 10000,
         'max' => 49999 
       ],
      'user'   => [
         'min' => 11,
         'max' => 30 
       ],
      'ratio'  => 30
    ]
  ],
  [
    'id'    => 3,
    'value' => [
      'amount' => [
         'min' => 50000,
       ],
      'user'   => [
         'min' => 50,
       ],
      'ratio'  => 35
    ]
  ] 
];

【问题讨论】:

  • 这个条件怎么返回1?如果amount的值为20000,user的值为10,则得到的ID也是1;
  • @TamilSelvanC 对不起,这是一个错误。它实际上应该返回 0
  • 您需要检查金额在金额的最小值和最大值之间以及用户在用户的最小值和最大值之间。例如:($min <= $value) && ($value <= $max)

标签: php


【解决方案1】:

您需要检查金额在金额的最小值和最大值之间以及用户在用户的最小值和最大值之间。

例如:($min <= $value) && ($value <= $max)

<?php
$array = [
    [
        'id'    => 1,
        'value' => [
            'amount' => [
                'min' => 100,
                'max' => 9999
            ],
            'user'   => [
                'min' => 5,
                'max' => 10
            ],
            'ratio'  => 10
        ]
    ],
    [
        'id'    => 2,
        'value' => [
            'amount' => [
                'min' => 10000,
                'max' => 49999
            ],
            'user'   => [
                'min' => 11,
                'max' => 30
            ],
            'ratio'  => 30
        ]
    ],
    [
        'id'    => 3,
        'value' => [
            'amount' => [
                'min' => 50000,
            ],
            'user'   => [
                'min' => 50,
            ],
            'ratio'  => 35
        ]
    ]
];



function in_range($min, $max, $value)
{
    return ($min <= $value) && ($value <= $max);
}

function getId($amount, $user, $array)
{
    $id = 0;
    foreach ($array as $v) {
        // if min value null then initialize as 0
        $min_amount = $v['value']['amount']['min'] ?? 0;
        // if max value null then initialize as the maximum value which PHP holds
        $max_amount = $v['value']['amount']['max'] ?? PHP_INT_MAX;

        $min_user = $v['value']['user']['min'] ?? 0;
        $max_user = $v['value']['user']['max'] ?? PHP_INT_MAX;
        if (in_range($min_amount, $max_amount, $amount) && in_range($min_user, $max_user, $user)) {
            $id = $v['id'];
            break;
        }
    }

    return $id;
}

var_dump( getId(100, 6, $array) );
var_dump( getId(20000, 10, $array) );
var_dump(getId(20000, 12, $array));

参考:

How to check if an integer is within a range of numbers in PHP?

https://www.php.net/manual/en/reserved.constants.php#constant.php-int-max

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 2013-05-23
    • 2011-03-06
    • 1970-01-01
    • 2015-10-08
    • 2022-12-17
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多