在另一个数组中捕获数组

Catch the array inside another array

让我向您展示我正在尝试做的事情的示例。我明白了:

$array = [
[
    'first_name' => 'John',
    'last_name'  => 'Doe',
], 
[
    'first_name' => 'Johny',
    'last_name'  => 'Dow',
],  
[
    'first_name' => 'Johnys',
    'last_name'  => 'Doesnot',
], 
[
    'first_name' => 'Joe',
    'last_name'  => 'Dow',
], 
[
    'first_name' => 'Joes',
    'last_name'  => 'Down',
],
];

我想捕获 'last_name' => 'Dow' 所在的最后一个数组,并更改此数组(first_namelast_name)的所有数据,并可能添加 age .

我认为 array_filter() 在这种情况下会有所帮助,但我不确定如何处理它。

谁能指导我如何实现这一目标。

谢谢!

因为要捕获最后一项,所以可以从数组末尾开始迭代,然后在捕获到第一项满足条件后打破循环:

for ($i = count($array) - 1; $i >= 0; $i--) {
    if ($array[$i]["last_name"] == "Dow") {
        $array[$i]["first_name"] = "New First Name";
        $array[$i]["last_name"] = "New Last Name";
        $array[$i]["age"] = 111;
        break;
    }
}

或者,您可以使用 array_reverse 遍历数组。将标志设置为 true 将保留键,允许我们通过其索引访问相应的项目。

foreach (array_reverse($array, true) as $index => $person) {
    if ($person['last_name'] == 'Dow') {
        // $array[$index]['first_name'] = 'some name';
        // $array[$index]['last_name'] = 'some name';
        $array[$index]['age'] = 25;

        break;
    }
}

echo '<pre>';
print_r($array);
echo '</pre>';

输出:

Array
(
    [0] => Array
        (
            [first_name] => John
            [last_name] => Doe
        )

    [1] => Array
        (
            [first_name] => Johny
            [last_name] => Dow
        )

    [2] => Array
        (
            [first_name] => Johnys
            [last_name] => Doesnot
        )

    [3] => Array
        (
            [first_name] => Joe
            [last_name] => Dow
            [age] => 25
        )

    [4] => Array
        (
            [first_name] => Joes
            [last_name] => Down
        )

)