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_search
和 array_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);
我在 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_search
和 array_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);