改变循环的元素

时间:2014-11-19 20:43:39

标签: php arrays loops

我有一个像这样的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;
    }

3 个答案:

答案 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+)。