【问题标题】:Retrieving Previous Values in For Each Loop Reference &$value检索 For Each 循环引用 &$value 中的先前值
【发布时间】:2018-01-20 03:02:27
【问题描述】:

这是我的$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),则插入缺失的 (或 NULL) ProductIDRef IN Array [2] 导致:

[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 循环来做到这一点,或者我必须做一些不同的事情,例如拆分数组并单独引用它们(关于如何最好地做到这一点的建议也将被接受) .

【问题讨论】:

    标签: php arrays loops foreach reference


    【解决方案1】:

    你可以这样做:

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

    【讨论】:

    • 是的!这甚至可以与 &amp;$ 一起使用,以便在执行此操作的同时执行其他操作。
    • 在您的帮助下得到了我想要的!谢谢你。将上述语句和任何其他语句放置在循环中也很重要。
    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多