Php 为每个循环引用检索中以前的值&$价值
下面是我的Php 为每个循环引用检索中以前的值&$价值,php,arrays,loops,foreach,reference,Php,Arrays,Loops,Foreach,Reference,下面是我的$array的外观 Array ( [0] => Array ( [id] => 1 [SKU] => SKU_1 [ProductIDRef] => 45645-12 ) [1] => Array ( [id] => 2 [SKU] => SKU_2
$array
的外观
Array
(
[0] => Array
(
[id] => 1
[SKU] => SKU_1
[ProductIDRef] => 45645-12
)
[1] => Array
(
[id] => 2
[SKU] => SKU_2
[ProductIDRef] => 43445-45
)
[2] => Array
(
[id] => 3
[SKU] => SKU_2
[ProductIDRef] =>
)
)
正如您在数组[1]
中看到的,它包含与数组[2]
中相同的SKU
值
但问题是,即使阵列[2]
与阵列[1]
具有相同的SKU
,阵列[2]
也没有ProductIDRef
的值
我想做的是引用我的foreach
循环中以前的数组——在上面的示例中,数组[1]
需要传递到数组[2]
如果找到上一次迭代中相同的SKU
值(SKU_2
),则在数组[2]
中插入缺少的(或NULL
)ProductIDRef
,结果是:
[2] => Array
(
[id] => 3
[SKU] => SKU_2
[ProductIDRef] => 43445-45
)
使用&$
使用&foreach将其循环,以修改原始$array
foreach($array as $key => &$value)
{
// if previous SKU value is found . . .
// $value['ProductIDref'] = $previousProductIDRefValue;
}
我尝试了常见的foreach
策略,设置$f=0循环前的code>并用$f+递增代码>紧接循环结束之前
$f = 0;
foreach($array as $key => &$value)
{
$value['customkey'] = $f;
$f++;
}
这可以工作,并返回如下所示的$array
:
Array
(
[0] => Array
(
[id] => 1
[ProductID] => 182040460699
[SKU] => SKU_1
[ProductIDRef] => 132438205662
[customkey] => 1
)
[1] => Array
(
[id] => 2
[ProductID] => 182040460699
[SKU] => SKU_2
[ProductIDRef] => 132438205662
[customkey] => 2
)
[2] => Array
(
[id] => 3
[ProductID] => 182040460699
[SKU] => SKU_3
[ProductIDRef] =>
[customkey] => 3
)
)
我可以有条件地为数组设置新值,或修改现有值
$value['customkey'] = $f;
if ($f == 2) {
///// set new `key => value` pair in Array [2]
// $value['status'] = 'unpublished';
///// modify the value of ProductIDRef in Array [2]
// $value['ProductIDRef'] = 'inserted_value';
}
$f++;
但是做一些类似于$value['ProductIDRef']=$value[1]['ProductIDRef']代码>不起作用
这正是我试图测试php&$
引用操作符如何工作的地方。。此外,即使失败了,,这个测试假设我确切地知道索引数组中要引用的键并获取其值,而不是我实际要做的,即搜索或引用数组中的每个SKU
和ProductIDRef
键来检测一对并插入其值
是否有一种方法可以使用foreach
&$
循环来实现这一点,或者我必须做一些不同的事情,例如将数组拆分并分别引用它们(关于如何最好地实现这一点的建议也将被接受)。您可以执行以下操作:
$arr = array(
array
(
"id" => 1,
"SKU" => 'SKU_1',
"ProductIDRef" => '45645-12'
),
array
(
"id" => 2,
"SKU" => 'SKU_2',
"ProductIDRef" => '43445-45'
),
array
(
"id" => 3,
"SKU" => 'SKU_2',
"ProductIDRef" => null
)
);
foreach( $arr as $key => $value ) {
//Check if current item's ProductIDRef is empty or null
//Check if prev entry exist AND SKU is the same
if ( ( $value[ "ProductIDRef" ] == "" || $value[ "ProductIDRef" ] == null ) && ( isset( $arr[ $key - 1 ] ) && $arr[ $key - 1 ][ "SKU" ] == $value[ "SKU" ] ) ) {
$arr[ $key ][ "ProductIDRef" ] = $arr[ $key - 1 ][ "ProductIDRef" ];
}
}
echo "<pre>";
print_r( $arr );
echo "</pre>";
对这甚至可以与&$
一起在执行此操作的同时执行其他操作。在您的帮助下,我得到了我想要的结果!非常感谢。在循环中放置上述语句和任何其他语句也是至关重要的。
Array
(
[0] => Array
(
[id] => 1
[SKU] => SKU_1
[ProductIDRef] => 45645-12
)
[1] => Array
(
[id] => 2
[SKU] => SKU_2
[ProductIDRef] => 43445-45
)
[2] => Array
(
[id] => 3
[SKU] => SKU_2
[ProductIDRef] => 43445-45
)
)