PHP:替换数组数据

时间:2015-12-02 14:44:41

标签: php arrays

我有一个关联数组数组,我想更新这个数组中的值,因此我创建了一个看起来像这样的函数。

//The Array of Associative arrays
 array (size=2)
  0 => 
    array (size=3)
      'slang' => string 'Tight' (length=5)
      'description' => string 'Means well done' (length=15)
      'example-sentence' => string 'Prosper it Tight on that job' (length=28)
  1 => 
    array (size=3)
      'slang' => string 'Sleet' (length=5)
      'description' => string 'Means to send on long errand' (length=28)
      'example-sentence' => string 'I am going to sleep sia' (length=23)

//功能

public function update($slang, $new)
{
  array_map(function($data, $key) use($slang, $new)
  {
    if($data['slang'] == $slang)
    {
      $data[$key] = array_replace($data, $new);
    }
  }, UrbanWord::$data);
}

我累了运行它,但原始数组不会更新。我需要帮助解决这个问题。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用array_reduce代替array_map,如下所示:

public function update($array, $slang, $new)
{
  return array_reduce($array, function ($result, $item) use ($slang, $new) {
    if ($item['slang'] == $slang) {
       $item = array_replace($item, $new);
    }

    $result[] = $item;

    return $result;
  }, array());
}

用法:

UrbanWord::$data = $this->update(
  UrbanWord::$data,
  'Tight',
  array('description' => 'another description')
);
var_dump($myUpdatedArray);

如果您想通过引用直接更新UrbanWord::$data,可以尝试以下方法:

class UrbanWord
{
    public static $data = array(
        array(
            'slang' => 'Test',
            'Desc'  => 'Frist Desc'
        ),
        array(
            'slang' => 'Test1',
            'Desc'  => 'Second Desc'
        )
    );
}

class MyClass
{
    public function update(&$array, $slang, $new)
    {
        $array = array_reduce($array, function ($result, $item) use ($slang, $new) {
            if ($item['slang'] == $slang) {
                $item = array_replace($item, $new);
            }

            $result[] = $item;

            return $result;
        }, array());
    }
}

$myClass = new MyClass();
$myClass->update(UrbanWord::$data, 'Test', array('Desc' => 'test'));

echo '<pre>';
var_dump(UrbanWord::$data);
echo '</pre>';