PHP-在类似1,3,6,7的数组中;如何选择第3行?(最低数字低于6)

PHP-在类似1,3,6,7的数组中;如何选择第3行?(最低数字低于6),php,Php,我有一个模糊的数组,它跟随产品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 Detail

我有一个模糊的数组,它跟随产品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; 
    }
}

那不应该在别的地方吗??如果我理解得好的话

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

if {
    ....
}
else {
   $writeTo=$key;
}

那不应该在别的地方吗??如果我理解得好的话

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

if {
    ....
}
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);

您可以使用变量来保持最后一个选中的键:

$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);


你只需要一个简单的状态机。保留“previous”值。如果当前循环迭代中的值匹配,则会拉出上一个值。在每次迭代结束时,只需
$prev=$val
即可…@MarcB感谢所有帮助,请参阅我的编辑,了解我认为正确的方法是什么?@deceze感谢所有帮助,请参阅我的编辑,了解我认为正确的方法是什么?您只需要一个简单的状态机。保留“previous”值。如果当前循环迭代中的值匹配,则会拉出上一个值。在每次迭代结束时,只需
$prev=$val
。@MarcB感谢所有帮助,请参阅我的编辑以了解我认为正确的方法?@deceze感谢所有帮助,请参阅我的编辑以了解我认为正确的方法。您好,感谢您的输入,但它不应该在else中,如果(第一行为空,第二行为填充,第三行为空)->将第二行附加到前面键的第二行。这有意义吗?如果键1是空的键2是满的键3是空的,你想在什么后面附加什么?你是我的英雄:)这让我有些挠头,但我终于明白你想说什么了。这是完美的解决方案!非常感谢你!!!您好,谢谢您的输入,但它不应该在else中,如果(第一行为空,第二行为填充,第三行为空)->将第二行附加到前面键的第二行。这有意义吗?如果键1是空的键2是满的键3是空的,你想在什么后面附加什么?你是我的英雄:)这让我有些挠头,但我终于明白你想说什么了。这是完美的解决方案!非常感谢你!!!嗨,谢谢你的意见。这是Marc B的建议,但我认为这有一个问题。假设有ID 8,与ID 7完全相同;如果7被删除,并且在第8行,上一个键将不存在,它被删除了?这肯定是正确的或非常接近。如果上一个键可能已取消设置,并且您希望将更改向下推到“previous”->“previous”元素,则$lastkey需要是一个数组,如果您取消设置键,您可以检查最后一个值,$lastkey[count($lastkey)-1]==要取消设置的键,从$lastkey数组中去掉最上面的值。@Gavin虽然它很接近,但如果有多行需要删除,我认为问题会出现。如果为每个键更新$lastkey值,则如果删除了上一个键,则会产生错误。如果行未被删除,则只需续订键值,并使用
else
子句指定。如果其中有几行需要追加怎么办?嗨,谢谢你的输入。这是Marc B的建议,但我认为这有一个问题。假设有ID 8,与ID 7完全相同;如果7被删除,并且在第8行,上一个键将不存在,它被删除了?这肯定是正确的或非常接近。如果上一个键可能已取消设置,并且您希望将更改向下推到“previous”->“previous”元素,则$lastkey需要是一个数组,如果您取消设置键,您可以检查最后一个值,$lastkey[count($lastkey)-1]==要取消设置的键,从$lastkey数组中去掉最上面的值。@Gavin虽然它很接近,但如果有多行需要删除,我认为问题会出现。如果为每个键更新$lastkey值,则如果删除了上一个键,则会产生错误。如果行未被删除,则只需续订键值,并使用
else
子句指定。如果其中有几行需要追加怎么办?