函数不会在内部运行两次-否则-语句

时间:2019-05-06 11:05:32

标签: php laravel

我想进行条形码查找。

第一次尝试,条形码将在用户条形码上本地查找。

如果是重复项,则该函数返回第一个实例,其文字为“在本地找到”

如果在本地找不到条形码,则应该进行全局搜索。

当在本地找不到条形码时,if else语句是我遇到的问题。

如果未在本地找到,则应检查以查看是否在全局找到。

public function updatePricelist(Request $request)
    {

        $user_id = Auth::user()->id;

        $counter = count($_POST["product_name"]);

        //product barcode
        for ($x = 0; $x < $counter; $x++) {
            $product_barcode[] = $_POST["product_barcode"][$x];
        }

        //check the barcode locally
        $result = $this->barcodeLookUp($product_barcode, 'local');

        if (!empty($result)) {

           $result =  "found locally";
        }

        else {

            $result = $this->barcodeLookUp($product_barcode, 'global');

            if (!empty($result)) {

                $result =  "found globally";
            }
        }

        return $result;
    }

    public function barcodeLookUp($product_barcode, $type)
    {

        $user_id = Auth::user()->id;

if ($type === 'local') {

            $db_barcodes = $this->getBarcodes($user_id, 'local');
        }

        if ($type === 'global') {

            $db_barcodes = $this->getBarcodes($user_id, 'global');
        }

        //merge arrays
        $merge_array = array_merge($db_barcodes, $product_barcode);

        function array_dup($ar)
        {
            return array_unique(array_diff_assoc($ar, array_unique($ar)));
        }

        $result = array_dup($merge_array);

        return current($result);

    }

    public function getBarcodes($user_id, $type)
    {


        if ($type === 'local') {

            $result = DB::select('SELECT products FROM vendor_pricelist WHERE user_id = ?', [$user_id]);
        }

        if ($type === 'global') {

            $result = DB::select('SELECT products FROM vendor_pricelist WHERE user_id != ?', [$user_id]);
        }

        $count_results = count($result);

        $temp = [];
        $temp_2 = [];

        for ($x = 0; $x < $count_results; $x++) {

            array_push($temp, json_decode($result[$x]->products));
        }

        $x = 0;

        while ($x < $count_results) {

            foreach ($temp[$x] as $value) {

                array_push($temp_2, $value[2]);
            }

            $x++;
        }

        $result = $temp_2;

        return $result;
    }

2 个答案:

答案 0 :(得分:1)

希望你一切都好。对于您的Http响应,Laravel尝试将所有响应转换为字符串或对象,并且如果您的查找未返回任何值,Laravel会设置$ result = false(布尔值),这将给您带来错误。 >

我已经移动了一些代码,使事情变得更加清晰。首先,我在您的updatePricelist()函数中添加了else if语句以进行最终检查。这是为了在查询不返回任何结果的情况下将$ result变量设置为字符串。

$result = $this->barcodeLookUp($product_barcode, 'global');

    if (!empty($result)) {

        $result = $result." found globally";
    }
    else {
        return "can save to db"; -> //this is to prevent the boolean response
    }

在此之后。我将您的array_dup()函数移到了条形码外观()函数之外。

public function barcodeLookUp($product_barcode, $type)
{

    $user_id = Auth::user()->id;

    if ($type === 'local') {

        $db_barcodes = $this->getBarcodes($user_id, 'local');
    }

    if ($type === 'global') {

        $db_barcodes = $this->getBarcodes($user_id, 'global');
    }

    //merge arrays
    $merge_array = array_merge($db_barcodes, $product_barcode);


    $result = $this->array_dup($merge_array);

    return current($result);

}

public function array_dup($ar)
{
    return array_unique(array_diff_assoc($ar, array_unique($ar)));
}

答案 1 :(得分:0)

希望您做得好,可能会有所帮助

    //check the barcode locally
    $result = $this->barcodeLookUp($product_barcode, 'local');

    if (empty($result)) {
        $result = $this->barcodeLookUp($product_barcode, 'global');

        if (!empty($result)) {
            return [
                "message" => "found globally",
                "result"  => $result,
            ];
        }

        return [
            "message" => "not found",
            "result"  => null,
        ];
    } else {
        return [
            "message" => "found locally",
            "result"  => $result,
        ];
    }