PHP-在类似1,3,6,7的数组中;如何选择第3行?(最低数字低于6)
我有一个模糊的数组,它跟随产品ID和相应的细节 以下是阵列输出的示例: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 - 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
子句指定。如果其中有几行需要追加怎么办?