php for循环来比较数组中的值

时间:2013-12-08 19:42:33

标签: php arrays

我有一个for循环,用于检查存储在数据库中的数字。 数据存储为字符串,然后在php中拆分。 下面的代码应仅返回该大小的库存量。它看起来应该有效。 数据存储在数据库中,如下所示:

尺寸,数量_ * _尺寸,数量:等等

我首先拆分数组:

$result = mysql_fetch_assoc($get);
$sizes = explode('_*_',$result['sizes']);

相当直接的前行,然后它被砍掉并分裂

for($x = 0; $x < count($sizes); $x){
    $current_size = explode(',',$sizes[$x]);
    if($size === (int)$current_size[1]){
        $stock = $current_size[1];
           //do something with matched data
           $x = count($sizes);
        }else{
           $x++;
        }
}

但它永远不会匹配数据。 我已经在这几个小时了,我一无所获。 这就是整个事情:

$result = mysql_fetch_assoc($get);
    $sizes = explode('_*_',$result['sizes']);
    //check stock of each size
    $size = (int)substr($size,6,2); //origal string from POST Size :x
    $stock = 0;
        for($x = 0; $x < count($sizes); $x){
        $current_size = explode(',',$sizes[$x]);
        echo $size.'='.$current_size[1].'.';
        if($size === (int)$current_size[1]){
            $stock = $current_size[1];
            echo 'found it';
            $x = count($sizes);
        }else{
            $x++;
        }
        echo $size.'='.$current_size[1].'    ';
    }
    echo $stock;

如果它有助于这是数据库中存储的数据: 4,10 _ * 6,14 * _ 8,0 _ * 10,3 * _ 12,0 _ * _ 14,2

数据被格式化以匹配爆炸函数,但它在这里发生了变化。

3 个答案:

答案 0 :(得分:2)

据我所知,大小应该在$ current_size [0]中,而不是像你的代码中的$ current_size [1]。

试试这个:

$result = mysql_fetch_assoc($get);
$sizes = explode('_*_',$result['sizes']);
//check stock of each size
$size = (int)substr($size,6,2); //origal string from POST Size :x
$stock = 0;
    for($x = 0; $x < count($sizes); $x){
    $current_size = explode(',',$sizes[$x]);
    echo $size.'='.$current_size[0].'.';
    if($size === (int)$current_size[0]){
        $stock = $current_size[1];
        echo 'found it';
        $x = count($sizes);
    }else{
        $x++;
    }
    echo $size.'='.$current_size[0].'    ';
}
echo $stock;

答案 1 :(得分:1)

您的=声明中有三个if运算符

if($size === (int)$current_size[1]){

我不知道是否仅使用两个(==)会改变任何东西。如果不是,你也可以尝试为$size变量

添加强制转换为(int)

答案 2 :(得分:1)

您的问题很可能是if语句中使用的strict comparison operator

if($size === (int)$current_size[1]){

你在评论中说过:

$size = mysql_real_ecape($_POST['size']); // assumed this is a typo in your comment not code

可能$size来自$_POSTmysql_real_escape_string(已弃用,使用mysqli)作为字符串,而您将它与整数进行比较。

...严格比较运算符比较变量类型以及内容,所以你在伪说:

if( [string - size] is equal to [int - current size] )

所以试试这个:

if((int)$size === (int)$current_size[1]){ // cast $size as integer also

......或

if($size == $current_size[1]){ // type juggle while comparing