【问题标题】:Change the value of an element in an array in PHP在 PHP 中更改数组中元素的值
【发布时间】:2014-09-15 08:22:32
【问题描述】:

这似乎是一件简单的事情,但我找不到答案。我想更改变量 $smartpath 的值(如果已设置但不知道如何设置)。这是数组:

$tags_header = array(
    $advertiser = isset( $_GET["advertiser"] )? $_GET["advertiser"] : false,
    $agency = isset( $_GET["agency"] )? $_GET["agency"] : false,
    $automotive = isset( $_GET["automotive"] )? $_GET["automotive"] : false,
    $education = isset( $_GET["education"] )? $_GET["education"] : false,
    $financial = isset( $_GET["financial"] )? $_GET["financial"] : false,
    $retail = isset( $_GET["retail"] )? $_GET["retail"] : false,
    $travel = isset( $_GET["travel"] )? $_GET["travel"] : false,
    $search = isset( $_GET["search"] )? $_GET["search"] : false,
    $social = isset( $_GET["social"] )? $_GET["social"] : false,
    $local = isset( $_GET["local"] )? $_GET["local"] : false,
    $smartpath = isset( $_GET["smartpath"] )? $_GET["smartpath"] : false,
    $halogen = isset( $_GET["halogen"] )? $_GET["halogen"] : false,
    $kenshoo = isset( $_GET["kenshoo"] )? $_GET["kenshoo"] : false,
    $techvalidate = isset( $_GET["techvalidate"] )? $_GET["techvalidate"] : false,
    $infinityawards = isset( $_GET["infinityawards"] )? $_GET["infinityawards"] : false,
);

我有这段代码可以更改它,但它似乎添加了两次

if (isset( $_GET["smartpath"] )) {
        $tags_header[$smartpath] = "SmartPath Case Study";
    }
    $tag_string_for_header = implode( ', ', array_filter( $tags_header )); 

当我回显 $tag_string_for_header 我得到..

Smartpath Case Study, SmartPath Case Study

想要的结果应该是..

SmartPath Case Study

【问题讨论】:

  • 只需更改 $smartpath 的值
  • 你的意思是在设置之后?就像$tags_header[10] = 'something' - 详细地说,我认为你没有意识到你实际上并没有在这里设置数组键。看起来您希望 $tag_headers['smartpath'] 等于某些东西
  • 我这样做的原因是因为我试图改变字符串中间的大小写。如果有其他方法请告诉我。

标签: php arrays wordpress


【解决方案1】:

好的,这就是我在这里看到的 -

我不知道是否定义了数组中的任何变量。如果不是,则这些值中的每一个都将被分配一个数字键,因此您的数组实际上如下所示:

$tags_header = array(
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    'SmartPath Case Study',
    false,
    false,
    false,
    false,
);

所以当你以后这样做时:

if (isset( $_GET["smartpath"] )) {
    $tags_header[$smartpath] = "SmartPath Case Study";
}

你实际上是在说:

if (isset( $_GET["smartpath"] )) {
    $tags_header[0] = "SmartPath Case Study";
}

因为$smartpath 没有定义。毫不奇怪,您的新数组如下所示:

$tags_header = array(
    'SmartPath Case Study',
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    'SmartPath Case Study',
    false,
    false,
    false,
    false,
);

这就是 array_filter 返回 2 个值的原因。

为避免这种情况,您应该为初始数组分配键:

$tags_header = array(
    'advertiser' => isset( $_GET["advertiser"] )? $_GET["advertiser"] : false,
    'agency' => isset( $_GET["agency"] )? $_GET["agency"] : false,
    'etc' => '...'
);

并使用键而不是未声明的变量覆盖它们:

if (isset( $_GET["smartpath"] )) {
    $tags_header['smartpath'] = "SmartPath Case Study";
}

【讨论】:

  • 完美。非常详尽的解释。像魅力一样工作!
猜你喜欢
  • 2010-09-19
  • 2015-07-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
相关资源
最近更新 更多