PHP,更改多维数组中的值

PHP, Changing values in an multidimensional array

我在 PHP 中得到以下数组:

$data[] = array('Slug' => 'jan', 'Name' => 'Jan', 'Alter' => '39', 'Jahrgang' => '1981', 'ID' => '3');
$data[] = array('Slug' => 'kjell', 'Name' => 'Kjell', 'Alter' => '4', 'Jahrgang' => '2018', 'ID' => '0');
$data[] = array('Slug' => 'bjarne', 'Name' => 'Bjarne', 'Alter' => '6', 'Jahrgang' => '2015', 'ID' => '2');
$data[] = array('Slug' => 'monika', 'Name' => 'Monika', 'Alter' => '72', 'Jahrgang' => '1950', 'ID' => '1');

如何输出“Slug = Jan”中“Jahrgang”的值?

如何将“Slug = Jan”所在的“Jahrgang”从 1981 年更改为 1982 年?

没有foreach有什么办法吗?

非常感谢!

可以像这样用 array_searcharray_column 对来完成:

$key = array_search('jan', array_column($data, 'Slug'));

array_column returns 仅具有给定键的单维数组,在本例中为 Slug,然后 array_search returns 此值的键在减少数组应与主数组中的相同。所以对于问题它将是:

echo $data[array_search('jan', array_column($data, 'Slug'))]['Jahrgang'];

$data[array_search('jan', array_column($data, 'Slug'))]['Jahrgang'] = '1982';

我会选择通过将数组键设置为 Slug 值来稍微重组数据以便于访问。

$data['jan'] = array('Name' => 'Jan', 'Alter' => '39', 'Jahrgang' => '1981', 'ID' => '3');
$data['kjell'] = array('Name' => 'Kjell', 'Alter' => '4', 'Jahrgang' => '2018', 'ID' => '0');
$data['bjarne'] = array('Name' => 'Bjarne', 'Alter' => '6', 'Jahrgang' => '2015', 'ID' => '2');
$data['monika'] = array('Name' => 'Monika', 'Alter' => '72', 'Jahrgang' => '1950', 'ID' => '1');

这将允许您使用该键访问或设置任何值。

//access
$info = $data['jan']; //array('Name' => 'Jan', 'Alter' => '39', 'Jahrgang' => '1981', 'ID' => '3')

//set
$data['jan']['Name'] = 'Not Jan';

//loop
foreach($data as $slug => $info) {
    //$info = array('Name' => 'Jan', 'Alter' => '39', 'Jahrgang' => '1981', 'ID' => '3')
}

在您的情况下,此方法的另一个优点是它确保每个“Slug”都是唯一的,因为数组不能包含重复的键。

您可以像这样使用“函数”而不是“嵌套 foreach”:

        function replace($data,$index){
        
        // count array length
        $num = count($data);
    
        if($index < $num){
            if($data[$index]['Slug'] === 'jan'){
                
                $a = [ $index => [ "Jahrgang"  => "1982" ] ] ;
            
                // replace new array with new values
                $re = array_replace($data,$a);
                
                return $re;
    
            }else{
    
                $index ++;
                check($data,$index);
            }
        }
                
    
    }
    
    replace($data,0);