2011-12-14 61 views
0

我试着去以下:比较特定号码的号码连续

我有一个具体的数字,我想比较连续这个数字到数字,并获得数每个号码。

我有一个样本,其工作正常,但如果行包含3个或更多相同的数字和具体数量只有2个相同的数字,如果具体数目是将计为3

例如:

和一排有以下数字:

计数SH应该是8 = 1,8 = 1,8 = 0; 2 = 1,5 = 0,6 = 0

因为只有2中的特定数量的数787-8因此第三8编号不应该在该行中进行计数。

我希望它明确:

这里是它可能会更清楚地解释其中的原因:

http://designer121.comze.com/sample.php

回答

1

你可以使用count_chars()在你的具体数量制定出字符,然后横跨数你行迭代。随着时间的推移,如果计数大于零,则从特定数字中减去计数或该数字,并且只设置标志(= 1部分)。

编辑:一些代码:

$number = '8821270'; 
$rows = '888256'; 
$count = array(); 

$digits = count_chars($number, 1); 

foreach (str_split($rows) as $row) { 
    if (isset($digits[ord($row)]) && $digits[ord($row)] > 0) { 
     $count[] = 1; 
     $digits[ord($row)]--; 
    } else { 
     $count[] = 0; 
    } 
} 

var_dump($count); 
1

如果我理解正确,您从数据库获取一个整数,想知道哪些号码里面存在预定义的数字。您可以将这些整数转换为字符串,而字符串基本上是一个字符数组。因此,首先创建一个数组,其中包含预定义数字中的数字和数量的信息。然后逐个字符地查看数据库编号,并查看它是否存在于预定义数字的数组中。如果是这样,请减少该号码的计数。

的代码看起来是这样的:

$number = 8821270; 
$row = 888256; 

//create string representation of integer 
$n = (string)$number; 
//calculate which numbers exist in the $number 
$row_n = array(); 
for($i =0; $i < strlen($n);$i++){ 
    $char = $n[$i]; 
    if (isset($row_n[$char])) { 
     $row_n[$char]++; 
    } 
    else { 
     $row_n[$char] = 1; 
    } 
} 
/* 
    at this point $row_n is an array where the key is a digit from $number 
    and the value is the quantity 
*/ 

//create string representation of fetched number 
$s = (string)$row; 
for($i =0; $i < strlen($s);$i++){ 
    $char = $s[$i]; 

    if (isset($row_n[$char]) && $row_n[$char] > 0) { 
     $result[] = array($char, 1); 
     $row_n[$char]--; //decrease count for that number 
    } 
    else { 
     $result[] = array($char, 1); 
    } 
} 

/* 
    Here result is an array with information on each separate number 
    Right now it looks like this: 
    array 
    0 => array 
     0 => digit 
     1 => status 
    1 => array 
     0 => digit 
     1 => status 

    Modify $result[] = array($char, 1); to make it look whatever you want 

*/ 
+0

感谢我在PHP新,所以我怎么会显示结果..? – 2011-12-15 00:10:11

+0

它取决于哪里。如果你只想看看那里有什么,可以使用var_dump($ variable)或print_r($ variable)。如果您想格式化您必须使用 的foreach($结果为$值){ $位数= $值[0]; $ status = $ value [1];/*在这里做$数字和$状态的东西*/ } – Zefiryn 2011-12-15 07:28:48

0

您可以使用array_intersect_assoc,但你必须转换你的号码先数组:

$numberOne = '8821270'; 
for($i=0;$i< strlen($numberOne);$i++){ 
    $numberOneArray[] = $numberOne[$i]; 
} 

$numberTwo = '888256'; 
for($i=0;$i< strlen($numberTwo);$i++){ 
    $numberTwoArray[] = $numberTwo[$i]; 
} 

$result = array_intersect_assoc($numberOneArray, $numberTwoArray); 
// display the result 
print_r(array($numberOneArray, $numberTwoArray,$result)); 

由于功能保存键,您现在可以寻找连续键,从0开始