У меня есть 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;
}
Я интерпретирую ваш вопрос, что вы хотите переименовать индекс массива Адреса в NewAddresses:
$relations['CityDistrict']['NewAddresses'] = $relations['CityDistrict']['Addresses'];
unset($relations['CityDistrict']['Addresses']);
EDIT: сделать это в вашем цикле foreach, изменить:
$relation['funky_key_' . $functionName] = $functionValue;
unset($relation[$functionName]);
чтобы:
$relations[$name]['funky_key_'.$functionName] = $functionValue;
unset($relations[$name][$functionName]);
$relations[$name]['CityDistrict']
- это выглядит , по крайней мере , как массив глубже. Может даже быть $relations[$name][$relation]['CityDistrict']
.
возможно, это то, что вы ищете
if (isset($array['n'])) {
$array['name'] = $array['n'];
unset($array['n']);
}
вы можете увидеть полную запись в поле " Изменить" в ассоциативном массиве в PHP
увидимся!
PD Извините, для моего английского не самый лучший
Ваша петля кажется неправильной. Во внешнем цикле $name
принимает значения, такие как "Адрес", а $relation
- это массив, такой как {"Город" =>..., "CityDistrict" =>...}.
Таким образом, во втором цикле $functionName
принимает значения, такие как City, CityDistrict и Contacts.
Если вы хотите изменить это, вам нужно сделать что-то вроде @hellcode:
if ('CityDistrict' == $functionName) {
$relations[$name]['NewDistrict'] = $relations[$name][$functionName];
unset($relations[$name][$functionName]);
continue;
}
Для меня это похоже на проблему Laravel
/Eloquent
. Если вы можете более точно указать, что именно вы пытаетесь выполнить, возможно, кто-то может быть более полезным.
Кроме того, вы, похоже, хотите создать функцию, заданную ее кодом в строке. Для этого вам понадобится create_function
(или объявить функцию как анонимную/лямбда-функцию):
$code = "return 42;";
$array['function'] = create_function('', $code);
print $array['function']();
Обратите внимание, что использование create_function несколько устарело. Также вам нужен PHP> 5. 3+ (или 5. 4+, если вы ходите лямбда и требуете $this
).