0

我有一个不起眼的数组,它遵循产品 ID 和相应的详细信息。

这是数组输出的示例:

id - 1
stockCode - 113
Desc - Printer 1
Cost - R 113.00

id - 3
stockCode - 133
Desc - Printer 3
Cost - R 133.00

id - 6
stockCode - 163
Desc - Printer 6
Cost - R 163.00

id - 7
stockCode - 
Desc - Printer 6 Details
Cost - 

id - 8
stockCode - 
Desc - Printer 6 Extra
Cost - 

由于一个太长的原因无法解释,我希望能够遍历这个数组并在那个循环内产生一个特定的结果。

也就是说,任何仅在第二个值中包含数据而在第一个和第三个值中都没有数据的 ID,将第二个值附加到键 (ID) 的前一个第二个值之前,这就是我卡住当前 id 的地方。完成此操作后,必须删除密钥并继续该过程。

这是代码,该数组被命名为 $csvarray 并且 $key 将与我的示例中的“id”相关:

# Clean array - append 2nd values to previous values
foreach($csvarray as $key=>$val)
{   
    // Imagine this is ID # 7 in the loop
    if ($val[0] == '' && $val[1] !== '' && $val[2] == '')
    {
        $writeTo = HOW TO I SELECT THE KEY BEFORE 7, IN THIS CASE 6
                   BUT IF IT WAS 6, THE KEY WOULD BE 3
        $csvarray[$writeTo][1] = $csvarray[$writeTo][1] . ', ' . $val[1];
        unset($csvarray[$key]);
    }
}

所以本质上,我想找到一种方法来选择当前值之前的键值,同时遍历一个数组......

如果有人想分享一些知识或对此问题有任何建议或意见或任何形式的意见,很高兴听到!

谢谢!

编辑 :

感谢您的输入!给定输入,正确的方法是这样的:

# Clean array - append 2nd values to preceeding key second value
$writeTo = null;
foreach($csvarray as $key=>$val)
{   
    if ($val[0] == '' && $val[1] !== '' && $val[2] == '')
    {
        $csvarray[$writeTo][1] = $csvarray[$writeTo][1] . ', ' . $val[1];
        unset($csvarray[$key]);
    }
    else 
    {
        $writeTo = $key; 
    }
}
4

2 回答 2

2

您可以使用变量来保存检查的最后一个键:

$csvarray = array(1 => array(113, 'Printer 1', 'R 113.00'), 3 => array(133, 'Printer 3', 'R 133.00'), 6 => array(163, 'Printer 6', 'R 163.00'), 7 => array('', 'Printer 6 Details', ''));
$lastKey = null;

foreach(array_keys($csvarray) as $key) {
      $val = $csvarray[$key];   
    if ($val[0] == '' && $val[1] !== '' && $val[2] == '') {
        if ($lastKey != null) {
            $csvarray[$lastKey][1] = $csvarray[$lastKey][1] . ', ' . $val[1];
            unset($csvarray[$key]);
        }
    }
    $lastKey = $key;
}

print_r($csvarray);
于 2013-05-08T18:58:47.473 回答
1

那不应该在其他地方吗?如果我理解得很好

你所要做的就是在你的 if 语句结束之后

if {
    ....
}
else {
   $writeTo=$key;
}
于 2013-05-08T18:53:15.197 回答