php
  • arrays
  • 2012-12-31 47 views 11 likes 
    11

    如何修改数组中的最后一个元素?修改数组中的最后一个元素

    阵列看起来像这样:通过其产生的值,并在每个字符串的末尾添加逗号/空间中的脚本生成

    $fields = array("firstName = 'Bob', ", 
           "lastName = 'Smith', ", 
           "email = '[email protected]', ", 
           "address = '123 anystreet', "); 
    

    阵列。我想从该数组中的最后一个元素中删除该逗号/空格。请记住,这些值实际上可以包含逗号/空格组合,因此只需删除最后一个元素的最后一个元素和最后两个字符。

    我已经看过end()函数,但我认为这不会有帮助,因为它只是获得了价值。

    编辑好吧,所以我创建了这个函数/数组,以便我只有一个mysql函数来更新用户。有点像检测更改功能,它只返回所需/更改的字段。我没有意识到这种方法存在问题。我认为,因为我已经有我的旧功能写的MySQL查询不应该有这样的问题。它所在的文件将无法公开访问。我将使用适用于我的最佳答案,但我要去寻找为什么这是有问题的,我很感谢关于此方法出了什么问题的意见/链接。谢谢。

    +2

    这看起来像SQL注入等待发生 –

    +0

    @LightnessRacesinOrbit我使用mysqli_real_escape_string在这个阵列的产生和事先消毒的所有数据, 感谢您的关注。 –

    +1

    仍然。为什么不使用键/值对本地?存储完整的SQL表达式只会导致问题,就像您现在遇到的那样。 –

    回答

    25

    喜欢这个!

    end($array); 
    $key = key($array); 
    reset($array); 
    
    +3

    如果数组是一个普通的数字,Chris的答案是一个更好的IMO。如果该数组是一个关联数组,则只有这个数组可以工作。 –

    +0

    “如果数组是联想的话,这样做是否也可以工作?我应该用这种方式发布它:s” –

    +0

    是的,这有助于:-) –

    8

    有做到这一点的简便方法,但它更容易,如果它分解成块遵循:

    $index = count($fields) - 1; 
    $value = $fields[$index]; 
    $fields[$index] = preg_replace("/,\ $/", "", $value); 
    
    +2

    不错。如果你只是使用'rtrim($ value,',');'而不是正则表达式,甚至会更好。 – jeroen

    +1

    或者只是用'substr'ing删除最后两个字符。 –

    +2

    @Jan Dvorak或者OP可以用','生成一个数组和内爆,整个问题就会消失。 – jeroen

    -1

    我认为PHP的Implode功能可能是一个很好的选择,而不是生成的逗号你自己。

    除非,你将不得不使用这样的:

    $lastfield = $fields[count($fields)-1]; 
    $lastfield = str_split($lastfield,strlen($lastfield)-2); 
    $fields[count($fields)-1] = $lastfield; 
    

    包括第一和第三行,以使第二行更容易阅读,但是这可以很容易地混合到一行。

    +0

    这只适用于有数值数组的情况。与关联的数组失败。 –

    0

    今天偶然发现。我认为最简单的非指针破的办法是:

    array_splice($array, -1, 1, strtolower(end(array_values($array))).'blah'); 
    

    当然,如果你没有照顾指针,你可以放下array_values。 但我不知道这是否是一种好方法,因为拼接的提取n替代物可能比流行或要求更苛刻?

    +0

    我认为在这种情况下,array_pop比array_splice简单。 –

    +0

    对,似乎更快 –

    3

    修改的最后一个数字元素的值:

    $lastValue = array_pop($fields); 
    $fields[] = rtrim(', ',$lastValue); 
    

    如果要为查询准备这些值我会建议在阵列中存储不带逗号的一切,然后调用需要防止当阵列破灭尾随逗号问题

    0

    有几个方法:

    1)关联数组,如果你不知道的最后一个元素键,你最好找到最后一个元素键第一和改变它的值。

    $array[end((array_keys($array)))] .= ' additional text'; 
    

    2)如果您不知道也不关心按键,您可以剪掉最后一个元素并创建一个新元素。

    $array[] = array_pop($array).' additional text'; 
    
    0

    数组弹出和推是最简单的方法来做基本数组。 (我知道这在技术上不是问题,但许多人也会来这里寻找与简单数组相关的答案)。

    <?php 
    
    function update_last(&$array, $value){ 
        array_pop($array); 
        array_push($array, $value);  
    } 
    
    ?> 
    

    然后你可以使用这样的功能:

    <?php 
    
    $array = [1,2,3]; 
    
    update_last($array, 4); //$array = [1,2,4]; 
    
    ?> 
    
    相关问题