【问题标题】:PHP arrays replacementPHP数组替换
【发布时间】:2013-11-16 09:32:21
【问题描述】:
$data = Array ( ['key1'] => 1 , ['key2'] => 20 , ['key3'] => 11)
$key1 = Array (1 => "a" , 2 => "b")
$key2 = Array (1 => "a" , .... 20 => "y") 
$key3 = Array (1 => "a" , .... 11 => "n")

替换 $data 数组中的所有值以返回的最简单方法是什么:

$data['key1'] = $key1[$data['key1']]

而不是一一做,即:

$data['key1'] = $key1[$data['key1']]
$data['key2'] = $key2[$data['key2']]...

【问题讨论】:

  • 你的问题不清楚..:(
  • 我引用了你的数组键 - 假设这不是伪代码,你应该启动错误报告,在那里你会看到一堆堆关于未定义常量的 E_NOTICE 被解释为字符串(除非你真的定义了所有这些常量,这似乎不太可能)
  • 为什么不使用 $data['key1']['value1'] .... ?

标签: php arrays replace


【解决方案1】:

我想你正在寻找这个:

foreach($data as $k => &$v)
{
    if($$k)
    {
        $t = $$k;
        if($t[$v]) $v = $t[$v];
    }
}

print_r($data);

但我建议在这里问自己一些关于意图的更大问题

【讨论】:

  • mmm 现在好多了,所以 $t = $$k;这一切都不同了,但为什么!!
  • 我不知道,我从来没有真正使用过可变变量。我想你只是不能直接对它们进行索引 - 我尝试使用 parens ($$k)[$v] 也没有任何运气
  • 任何方式你的答案都应该被选为正确答案,因为它比@andy's简单一点
【解决方案2】:

这个问题很难理解,但我认为您要做的是使用$data 从其他数组中提取数据。如果是这种情况,这应该可行:

$data = array('key1' => 1, 'key2' => 2, 'key3' => 0);
$key1 = array(1,2,3,4,5);
$key2 = array(6,7,8,9,10);
$key3 = array(11,12,13,14);

foreach(array_keys($data) as $key) {
  if(isset($$key)) {
    $target = $$key;
    $value = $target[$data[$key]];

    $data[$key] = $value;
  }
}

var_dump($data); #=> [key1 => 2, key2 => 8, key3 => 11]

【讨论】:

  • 这正是我要找的
  • 既然你的答案是唯一正确的,你能否解释一下为什么 jon_darkstar 的答案和 quinqui 的答案是错误的,即使它们看起来恰到好处但它们不起作用
  • 如果你看一下我所做的最后一次编辑,这个也不会起作用,因为 PHP 在引用双变量数组时有一个奇怪的错误。 $a = array(0,1,2); $b = 'a'; echo $$b[0] 不起作用,但 $a = array(0,1,2); $b = 'a'; $c = $$b; echo $c[0] 会出于某种奇怪的原因
【解决方案3】:

您可以尝试使用 PHP 的 variables 变量,如下所示:

foreach ($data as $mkey => $mval)
{
 $data[$mkey] = $$mkey[$data[$mkey]];
}

【讨论】:

  • 回答 user2903728 在@andy 的帖子中的评论,我必须说我的代码失败了,因为我正在替换我正在经历的同一个数组中的一个值。这个想法是向您展示变量 variables 的使用:s
  • 不,这不是答案,因为它在替换主数组中的值时有效,但如果不将变量变量分配给另一个变量,它就不起作用,例如,您可以使用:$t = $$ k;$v = $t[$v];但是 $v = $$k[$v] 不起作用
  • 呃,我不知道 :o 好吧,谢谢@andy 的代码运行良好^^U
【解决方案4】:

我更喜欢这个解决方案

array_walk(
    $data,
    function(&$a, $b) {
        $a = $$a[$b];
    }
);

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2012-03-13
    • 1970-01-01
    • 2017-12-04
    • 2010-09-26
    • 2012-07-26
    • 2017-04-28
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多