Foreach循环总是将字符串的第一个字符添加到数组中


Foreach loop always add first character of string to the array

我正在制作一个函数,它可以帮助我将字符串强制转换为数组,但当函数总是向数组添加第一个字符时,这很奇怪。首先谢谢,这是我在函数中使用的代码:

   $string = '0:009987;1:12312;2:45231;3:00985;3:10923;4:11253;4:62341;4:01102;4:58710;4:10102;4:87093;4:12034;5:9801;6:1092;6:4305;6:1090;7:450;8:34';
$explodedString = explode(';', $string);
//var_dump($explodedString);
$takeArray = array();
$counti = 0;
foreach($explodedString as $exploded){
 $secondExp = explode(':', $exploded);
 var_dump($secondExp);
 if(isset($takeArray[$secondExp[0]])){
  $takeArray[$secondExp[0]][$counti] = $secondExp[1];
 }else{
  $takeArray[$secondExp[0]] = $secondExp[1];
 }
 $counti++;
}
var_dump($takeArray);

这是该代码的当前输出:

array (size=9)

0 => string '009987' (length=6)
  1 => string '12312' (length=5)
  2 => string '45231' (length=5)
  3 => string '00981' (length=5)
  4 => string '11253 605181' (length=12)
  5 => string '9801' (length=4)
  6 => string '1092          41' (length=16)
  7 => string '450' (length=3)
  8 => string '34' (length=2)

查看第4行,您将看到字符串:"605181",该字符串来自属于4的每个值的第一个字符。但我需要一个像这样的输出数组:

[0] => {'009987'},
....
[4] => { '11253', '62341', ...., },
....

请帮帮我。

我不确定您为什么需要$counti。你所需要做的就是,如果$takeArray[$n]不存在,初始化它,并向它推送一个新值

if(!isset($takeArray[$secondExp[0]])) {
    // Initialize the array
    $takeArray[$secondExp[0]] = array();
}
// Push the new value to the array
$takeArray[$secondExp[0]][] = $secondExp[1];

您只需要执行以下操作:

$takeArray = array();
foreach($explodedString as $exploded) {
  $secondExp = explode(':', $exploded);
  $takeArray[(int)$secondExp[0]][] = $secondExp[1];
}
$string = '0:009987;1:12312;2:45231;3:00985;3:10923;4:11253;4:62341;4:01102;4:58710;4:10102;4:87093;4:12034;5:9801;6:1092;6:4305;6:1090;7:450;8:34';
$explodedString = explode(';', $string);
$takeArray = array();
foreach($explodedString as $exploded)
{
    $secondExp = explode(':', $exploded);
    $takeArray[$secondExp[0]][] = $secondExp[1];
}
var_dump($takeArray);