When I was making something today, I discovered a few interesting places. I wrote them down and shared them with everyone. Start with a few small questions
How would you record an age group? Can you express something like "50~70"?
Perhaps you will say it is very simple, use two fields, one start=>Start age, and one end=>End age, or in one field, use the format of start|end, with a non-number in the middle Separate, or use start|start-end, haha, there are many ways anyway, but if you ask for an upgrade at this time, and you are asked to express the ages of 10~20, 25, 29~40, how do you express it? Of course, you can also express it through a string, such as: 10-20|25|29-40, and set some rules to express it yourself. But can this representation method be optimized? The answer is yes.
You can use the 01 string to represent a non-repeating age interval. The default is 100 0s, marking the position from 1 to 100 years old. If it is 1, it means that the age is present, and if it is zero, it means that there is no such age. For ease of explanation, 10 zeros are used here to represent 1 to 10 years old, then:
0111111000 => means 2~7 years old
0110111010 => means 2~3, 5~7, 9 years old
Haha, is it very convenient to express and easy to understand? Of course, this also has its shortcomings. It is very convenient to express, but it is really inconvenient to use and requires calculation.
Select some numbers randomly from 1, 2, 3,..., 199, 200. How do you express it?
Of course, there are many ways to do this, such as using string representation and dividing each number with non-digits, like this: 1|5|100|199. What I want to say is still represented by a string of 01, just like the 1~200 above. For the problem of selecting part of it, I can use a string of 200 positions, each position is 0 or 1, and each position is placed is its corresponding number. In this case, this information will be represented as a string of 01. Let’s give an example from 0 to 10
0111111000 => means 2, 3, 4, 5, 6, 7
0110111010 => means 2, 3, 5, 6, 7, 9
Of course, some people may say that the data I want to represent is not continuous. For example, I want to represent
1926, 19658, 12, 5638, 8975, 965, 369, 5126, 5698, 14556
Some of the above numbers are very large, some are very small, and there is no pattern. We want to indicate that the largest number of them will not be used for numbers that do not exceed 10 in total (for example, there are 19658 0s here). Of course not Yes, mapping can be used in this case. The mapping relationship is as follows:
<span>1</span> => <span>1926</span><span>, </span><span>2</span> => <span>19658</span><span>, </span><span>3</span> => <span>12</span><span>, </span><span>4</span> => <span>5638</span><span>, </span><span>5</span> => <span>8975</span><span>, </span><span>6</span> => <span>965</span><span>, </span><span>7</span> => <span>369</span><span>, </span><span>8</span> => <span>5126</span><span>, </span><span>9</span> => <span>5698</span><span>, </span><span>10</span> => <span>14556</span>
At this time, if you want to express the selected situations of 1926, 12, and 5698, you can use the following 01 string:
1010000010
Perhaps you have also discovered that this can also have the effect of saving traffic. When the two parties interact, we establish the mapping relationship. During network transmission, there is no need to transmit the real data, only the corresponding 01 string.
Of course, this can also mean many things. For example, I divided a day into segments of 5 minutes, with a total of 288 segments. At this time, I randomly selected some 5-minute segments from them, and used 288 segments of their own length. 01 string to express whether this is good, haha.
In some cases, this 01 string representation method is quite desirable, and sometimes it can save traffic.
The above has introduced the use of 01 string, including aspects of the content. I hope it will be helpful to friends who are interested in PHP tutorials.