2013-05-08 4 views
0

Я работаю над проектом, который должен иметь все, что показано штрих-кодами, поэтому я создал 7 номеров для алгоритма EAN8 и теперь должен получить эти 7 номеров отдельно, прямо сейчас, м с использованием для генерацииphp split integer на более мелкие части

$codeint = mt_rand(1000000, 9999999); 

и мне нужно, чтобы получить это 7 номеров каждый по отдельности, так что я можно вычислить контрольную сумму для EAN8, как я могу разделить это целое число 7 частей, например

12345678 to 
arr[0]=1 
arr[1]=2 
arr[2]=3 
arr[3]=4 
arr[4]=5 
arr[5]=6 
arr[6]=7 

любая помощь будет оценена.

также я думаю, что я становлюсь сумасшедшим: D, потому что я уже попробовал большинство решений вы дали мне здесь раньше и что-то не работает, как он должен работать, например:

$codeint = mt_rand(1000000, 9999999); 
echo $codeint."c</br>"; 
echo $codeint[1]; 
echo $codeint[2]; 
echo $codeint[3]; 

дает мне:

9082573c 
empty row 
empty row 
empty row 


solved! $codeint = (string)(mt_rand(1000000, 9999999)); 
+0

если 'mt_rand()' возвращает 1 или целое с менее 7 цифр? – DonCallisto

+2

['str_split ($ codeint)'] (http://php.net/manual/en/function.str-split.php) достаточно? – BlitZ

+0

'str_split ($ int)'? – HamZa

ответ

2

Есть два способа сделать это , один из которых достаточно уникален для PHP:

1) В PHP вы можете обрабатывать целочисленное значение в виде строки, а затем индексировать отдельные цифры:

$digits = "$codeint"; 
// access a digit using intval($digits[3]) 

2) Тем не менее, гораздо более элегантный способ заключается в использовании фактического целочисленное деление и немного знаний о математических тождеств цифр, а именно в ряде 123 каждое значение место состоит из восходящих полномочий 10, т.е. : 1 * 10^2 + 2 * 10^1 + 3 * 10^0.

Следовательно, разделение по степеням 10 позволит вам получить доступ к каждой цифре по очереди.

+0

nice, +1, потенциально литье в строку тоже могло бы работать, '(string) $ codeint'. –

+0

Когда PHP получал правильные броски? Прошло некоторое время с тех пор, как я коснулся его: p – Gian

+0

Возможно, слишком сложный в этом случае, но мне действительно нравится математическое решение :) +1 –

1

это основная математика вы можете разделить их в цикле от 10

12345678 составляет 10 * 8^1 + 7 * 10^2 + 6 * 10^3 ...

другой вариант отливают его в массив символов, а затем просто получить его в символьном

+0

Я обновил вопрос сейчас, что-то не работает, как должно:/ – enigmaticus

3

Попробуйте использовать str_split() функцию:

$var = 1234567; 
print_r(str_split($var)); 

Результат:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
    [4] => 5 
    [5] => 6 
    [6] => 7 
) 
+0

Я обновил вопрос сейчас, что-то не работает он должен:/ – enigmaticus

-1

хорошо, что вы можете сделать, это

Тип приведение к строке с 0

предварительного заполнения

это, как она работает

$sinteger = (string)$integer; 
$arrsize = 0 ; 
    for (i=strlen($sinteger), i == 0 ; i--) 
    { 
    arr[$arrsize]=$sinteger[i]; 
    $arrsize++; 
    } 

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

+0

Правильно ли это PHP? – BlitZ

+0

проверьте другие ответы, если вы передадите его в строку, вы можете получить доступ к индивидуальному символу, подобному символу java, но как массив в php. –

+0

@CORRUPT no it is not ... 'len' должно быть' strlen', в PHP нам не нужно «бросать» наши строки '$ sinteger = (string) $ integer;', PHP делает это для нас и 'arr [$ arrsize] = $ sinteger [i];' должен быть '$ arr [$ arrsize] = $ sinteger [$ i];' ... – HamZa

0

Редактировать

После @HamZa DzCyberDeV предложение

$string = '12345678'; 
echo "<pre>"; print_r (str_split($string)); 

Но в виду, что это идет, как показано ниже, но ваше предложение лучше.


Если вы получаете строку из вашей функции, то вы можете использовать один ниже

$string = '12345678'; 
$arr = explode(",", chunk_split($string, 1, ',')); 
$len = count($arr); 
unset($arr[$len-1]); 
echo "<pre>"; 
print_r($arr); 

и выход

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
    [4] => 5 
    [5] => 6 
    [6] => 7 
    [7] => 8 
) 
+0

Просто используйте 'str_split()', и вы закончите в 1 строке. – HamZa

+0

@HamZaDzCyberDeV: Хорошо, указав это. Но 'str_split()' не задумывался, так что ушел с разным сценарием. ;) – NullPointer

+0

Я обновил вопрос сейчас, что-то не работает, как должно: / – enigmaticus

Смежные вопросы