我有一个像这样的php数组(var_dump) 我需要更改其中一个元素
array (size=204)
'Address' =>
array (size=3)
'City' =>
array (size=3)
0 => string 'return $this->hasOne(City::className(), ['id' => 'cityId']);'
1 => string 'City' (length=4)
2 => boolean false
'CityDistrict' =>
array (size=3)
0 => string 'return $this->hasOne(CityDistrict::className(), ['id' => 'cityDistrictId']);' (length=76)
1 => string 'CityDistrict' (length=12)
2 => boolean false
'Contacts' =>
array (size=3)
0 => string 'return $this->hasMany(Contact::className(), ['addressId' => 'id']);'
1 => string 'Contact' (length=7)
2 => boolean true
'City' =>
array (size=3)
'Addresses' =>
array (size=3)
0 => string 'return $this->hasMany(Address::className(), ['cityId' => 'id']);'
1 => string 'Address' (length=7)
2 => boolean true
'Region' =>
array (size=3)
0 => string 'return $this->hasOne(Region::className(), ['id' => 'regionId']);' (length=64)
1 => string 'Region' (length=6)
2 => boolean false
'CityDistricts' =>
array (size=3)
0 => string 'return $this->hasMany(CityDistrict::className(), ['cityId' => 'id']);'
1 => string 'CityDistrict' (length=12)
2 => boolean true
'CityDistrict' =>
array (size=2)
Addresses =>
array (size=3)
0 => string 'return $this->hasMany(Address::className(), ['cityDistrictId' => 'id']);'
1 => string 'Address' (length=7)
2 => boolean true
'City' =>
array (size=3)
0 => string 'return $this->hasOne(City::className(), ['id' => 'cityId']);'
1 => string 'City' (length=4)
2 => boolean false
如何在此循环中更改“CityDistrict”值?还是'地址'?使用php foreach 我的代码不起作用请帮助理解错误!
private static function checkExistClass($relations)
{
foreach ($relations as $name => $relation) {
foreach ($relation as $functionName => $functionValue) {
$functionNameGet = 'get' . $functionName;
$directory = new Model;
if (method_exists($directory, $functionNameGet)) {
$relation['funky_key_' . $functionName] = $functionValue;
unset($relation[$functionName]);
}
}
}
return $relations;
}
答案 0 :(得分:0)
我解释您要将数组索引地址重命名为新地址的问题:
编辑: 要在foreach循环中执行此操作,请更改:
$relations['CityDistrict']['NewAddresses'] = $relations['CityDistrict']['Addresses'];
unset($relations['CityDistrict']['Addresses']);
为:
$relation['funky_key_' . $functionName] = $functionValue;
unset($relation[$functionName]);
答案 1 :(得分:0)
也许这就是你正在寻找的东西
if (isset($array['n'])) {
$array['name'] = $array['n'];
unset($array['n']);
}
您可以在Change key in associative array in PHP
中看到完整的帖子见到你!
对不起,因为我的英语不是最好的
答案 2 :(得分:0)
你的循环似乎错了。在外部循环中,$name
假定诸如“地址”之类的值,而$relation
是一个数组,例如{'City'=> ...,'CityDistrict'=> ......}。
因此,在第二个循环$functionName
中,假设City,CityDistrict和Contacts等值。
如果你想改变那个,你需要做一些像@hellcode建议:
if ('CityDistrict' == $functionName) {
$relations[$name]['NewDistrict'] = $relations[$name][$functionName];
unset($relations[$name][$functionName]);
continue;
}
这对我来说似乎是一个Laravel
/ Eloquent
问题。如果你能更准确地说明你想要完成的是什么,那么可能有人会更有用。
此外,您似乎想要创建一个函数,因为它的代码是字符串。为此,您需要create_function
(或将该函数声明为匿名/ lambda函数):
$code = "return 42;";
$array['function'] = create_function('', $code);
print $array['function']();
请注意,create_function的使用已被弃用。你还需要一个PHP> 5.3+(如果你去lambda 和需要$this
,则为5.4+)。