Сравните конкретное число с числами в строке в таблице MySQL в PHP - PullRequest
0 голосов
/ 15 декабря 2011

Я пытаюсь следующее:

У меня есть конкретное число, и я хотел бы сравнить это число с числами в строке и подсчитать каждое число.

У меня есть образец, и он работает нормально, но если в строке 3 или более одинаковых числа, а в указанном номере только 2 одинаковых числа, оно будет считаться 3.

Например, если конкретный номер:

8 8 2 1 2 7 0

и в ряд идут следующие цифры:

8 8 8 2 5 6

Количество должно быть 8 = 1, 8 = 1, 8 = 0; 2 = 1, 5 = 0, 6 = 0

потому что в конкретном номере только 2 числа 8, поэтому третье число 8 не должно учитываться в строке.

Надеюсь, все ясно:

вот ссылка, которая может быть более понятна для объяснения:

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

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

Вы можете использовать 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 голос
/ 15 декабря 2011

Если я правильно понял, вы получаете целое число из db и хотите знать, какие числа внутри существуют в предопределенном числе. Вы можете преобразовать эти целые числа в строку, а строка в основном представляет собой массив символов. Поэтому сначала создайте массив с информацией о том, какие числа и в каком количестве находятся в предопределенном числе. Затем пройдитесь по дБ число за символом и посмотрите, существует ли он в массиве предопределенного числа. Если это так, уменьшите количество для этого числа.

Код может выглядеть так:

$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 голосов
/ 15 декабря 2011

Вы можете использовать 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

...