Изменить элемент цикла

0

У меня есть 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
    Одна вещь, которая вряд ли сработает, это то, что == в аргументе method_exists () ...
  • 0
    @lserni: спасибо за ответ, я изменил код, но это не помогает, посмотрите мои изменения
Теги:
arrays
loops

3 ответа

0
Лучший ответ

Я интерпретирую ваш вопрос, что вы хотите переименовать индекс массива Адреса в 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]);
  • 0
    Возможно , $relations[$name]['CityDistrict'] - это выглядит , по крайней мере , как массив глубже. Может даже быть $relations[$name][$relation]['CityDistrict'] .
  • 0
    @Isemi: var_dump не выглядит глубже :-)
Показать ещё 3 комментария
0

возможно, это то, что вы ищете

if (isset($array['n'])) {
  $array['name'] = $array['n'];
  unset($array['n']);
}

вы можете увидеть полную запись в поле " Изменить" в ассоциативном массиве в PHP

увидимся!

PD Извините, для моего английского не самый лучший

0

Ваша петля кажется неправильной. Во внешнем цикле $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).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню