Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为每个循环引用检索中以前的值&$价值_Php_Arrays_Loops_Foreach_Reference - Fatal编程技术网

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并用
$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
        )

)