通过值构建嵌套数组

3

我有一个嵌套数组,想要根据原始数组中的某个值处理成另一个嵌套数组。

这是我的原始数组,它是嵌套的,因为后面我会引入其他值。

$dataArray = array (
    0 => array(
            "adgroupid" => "5426058726"
    ),
    1 => array(
            "adgroupid" => "5426058086"
    ),
    2 => array(
            "adgroupid" => "5426058086"
    ),
    3 => array(
            "adgroupid" => "5426058087"
    ),
    4 => array(
            "adgroupid" => "5426058087"
    ),
    5 => array(
            "adgroupid" => "5426058088"
    ),
    6 => array(
            "adgroupid" => "5426058089"
    ),
    7 => array(
            "adgroupid" => "5426058089"
    ),
    8 => array(
            "adgroupid" => "5426058090"

这是我目前得到的结果,注意数组1和2中的字符串应该嵌套在同一个数组中,就像3和5中一样

array (size=10)
  0 => 
    array (size=1)
      0 => string '5426058726' (length=10)
  1 => 
    array (size=1)
      0 => string '5426058086' (length=10)
  2 => 
    array (size=1)
      0 => string '5426058086' (length=10)
  3 => 
    array (size=2)
      0 => string '5426058087' (length=10)
      1 => string '5426058087' (length=10)
  4 => 
    array (size=1)
      0 => string '5426058088' (length=10)
  5 => 
    array (size=2)
      0 => string '5426058089' (length=10)
      1 => string '5426058089' (length=10)
  6 => 
    array (size=4)
      0 => string '5426058090' (length=10)

这是我的代码,我需要使用if语句,因为在后面的阶段我想引入另一个参数:

$newdataArray = array();
$j = 0; // Set value of working variables
$adgroupidcheck = 0;

foreach ($dataArray as $value) { // Loop through the array

    if( $adgroupidcheck != $value['adgroupid'] ) { // Check $adgroupidcheck
        $newdataArray[][] = $value['adgroupid']; // Create a new nested array
        $j ++; // increment $j
    } else {
        $newdataArray[$j][] = $value['adgroupid'];  // Add to the current array
    }
    $adgroupidcheck = $value['adgroupid']; // Set $adgroupidcheck
}

我的问题是,我的代码只有在数组检查循环的第一个实例未起作用后才能正常运行。 任何帮助都将不胜感激。 谢谢。

foreach($dataArray as $item) $new[$item['adgroupid']] []= $item['adgroupid']; 这个语句可以实现相应的功能,但是你能否解释一下为什么需要这样一个数组(n次相同的字符串)? - georg
具有相同值的条目是否总是连续的? - Barmar
谢谢,是的,具有相同值的条目将始终连续。 - Boomfelled
2个回答

0

你应该使用前缀自增运算符来增加 $j 的值,这样它才会被正确地添加到数组中。否则它会被发送到下一个位置,可以快速跟踪一下。

if( $adgroupidcheck != $value['adgroupid'] ) { 
    $newdataArray[++$j][] = $value['adgroupid']; 
} else {
    $newdataArray[$j][] = $value['adgroupid'];  
}

0
 foreach ($dataArray as $value) { 

        if( $adgroupidcheck != $value['adgroupid'] ) { 
            $newdataArray[][] = $value['adgroupid']; 
            $j ++; // increment $j

        } else {
            $j--; //decrease j which was incremented after inserting one value  
            $newdataArray[$j][] = $value['adgroupid']; 
            $j++; // increment it again for it's original or new index

        }
        $adgroupidcheck = $value['adgroupid']; 
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接