26

配列の最後の要素を変更するにはどうすればよいですか?

配列は次のようになります。

$fields = array("firstName = 'Bob', ",
                "lastName = 'Smith', ",
                "email = 'bob@example.com', ",
                "address = '123 anystreet', ");

配列は、値を作成し、各文字列の末尾にコンマ/スペースを追加するスクリプトによって生成されます。その配列の最後の要素のみからそのコンマ/スペースを削除したい。値には実際にはコンマとスペースの組み合わせが含まれている可能性があるため、最後の要素と最後の要素の最後の 2 文字のみを削除する必要があることに注意してください。

関数を見てきましたend()が、値を取得するだけなので、役に立たないと思います。

編集OKなので、この関数/配列を作成して、ユーザーを更新するためのmysql関数が1つだけになるようにしました。変更検出機能のようなもので、必須/変更されたフィールドのみを返します。このアプローチに関連する問題があることに気づきませんでした。古い関数で既に mysql クエリを記述しているので、この方法で問題はないはずだと思いました。それが入っているファイルは、一般にはアクセスできません。私にとって最適な回答を使用しますが、これが問題である理由を探します。このアプローチの何が問題なのかについてのコメント/リンクをいただければ幸いです。ありがとう。

4

9 に答える 9

34

このような!

end($array);
$key = key($array);
reset($array);
于 2012-12-31T18:40:19.467 に答える
14

これを行うための簡単な方法がありますが、それが細かく分割されている場合は、従うのが簡単です。

$index = count( $fields ) - 1;
$value = $fields[$index];
$fields[$index] = preg_replace( "/,\ $/", "", $value );
于 2012-12-31T18:40:55.000 に答える
6

配列の pop と push は、基本的な配列に対してこれを行う最も簡単な方法です。(技術的にはそれが問題ではないことはわかっていますが、多くの人が単純な配列に関する答えを求めてここに来るでしょう)。

<?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];

?>
于 2016-01-24T10:25:10.527 に答える
6

最後の数値要素の値を変更するには:

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

クエリ用にこれらの値を準備している場合は、コンマなしですべてを配列に格納し、必要に応じてその配列で implode を呼び出して、末尾のコンマの問題を防ぐことをお勧めします

于 2015-11-30T14:07:45.173 に答える
4

いくつかの方法があります:

1) 連想配列の場合、最後の要素キーがわからない場合は、最初に最後の要素キーを見つけてその値を変更することをお勧めします。

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

2) キーを知らず、気にしない場合は、最後の要素を切り取って新しい要素を作成できます。

$array[] = array_pop($array).' additional text';
于 2015-12-10T04:47:54.427 に答える
0

今日これにつまずいた。ポインターを壊さない最も簡単な方法は次のとおりだと思います。

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

もちろん、ポインターを気にする必要がない場合は、array_values を削除できます。しかし、スプライスの抽出と置換は pop や sth よりも要求が厳しい可能性があるため、これが良い方法なのだろうか?

于 2014-02-16T15:14:08.460 に答える
-1

コンマを自分で生成する代わりに、 PHP のImplode関数が良い代替手段になると思います。

それを除けば、次のようなものを使用する必要があります。

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

1 行目と 3 行目は 2 行目を読みやすくするために含まれていますが、これは 1 行に簡単に合成できます。

于 2012-12-31T18:45:37.860 に答える