我有一个模糊的数组,后面跟着产品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;
}
}
您可以使用一个变量来保存最后选中的键:
$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);
不应该在else中吗??如果我理解得好
你所要做的就是在if语句结束后if {
....
}
else {
$writeTo=$key;
}