在PHP中更改数组中元素的值

时间:2014-07-23 23:07:46

标签: php arrays wordpress

这似乎是一件简单的事情,但我无法找到答案。我想改变变量$ 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

1 个答案:

答案 0 :(得分:0)

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

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

$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";
}