2016-06-16 9 views
2

私は配列を持っていて、新しい数値配列を作成したいと思います。これは、次のようになります。PHP数値配列の順

$created_old = explode("_", $result[$i]["created"]); 
$created_new = array(); 
$created_new[0] = $created_old[2]; 
$created_new[1] = $created_old[0]; 
$created_new[2] = $created_old[1]; 
$created_new[3] = ""; 
$created_new[4] = rtrim(explode(":", $created_old[3])[2], ")"); 

//Get name from the database 

$created_new[3] = $name; 

$created = implode("_", $created_new); 

このバージョンではうまく動作しますが、以前は1行がありませんでしたので、コードは次のようになります。文字列$createdがする第2のコードで

$created_old = explode("_", $result[$i]["created"]); 
$created_new = array(); 
$created_new[0] = $created_old[2]; 
$created_new[1] = $created_old[0]; 
$created_new[2] = $created_old[1]; 
//$created_new[3] = ""; - I am missing 
$created_new[4] = rtrim(explode(":", $created_old[3])[2], ")"); 

//Get name from the database 

$created_new[3] = $name; 

$created = implode("_", $created_new); 

注文間違い。インデックス4と3が切り替わります。連想配列の場合はこれを理解するだろうが、数値配列であるため、数値的に増加するインデックスを仮定し、このような順序でbeeingを行う。私は、コードの動作、なぜそれがないと...

敬具 JRsz

+0

PHPのあらゆる 'numeric'配列がありません。すべてが結合的です。 –

+0

これは私の質問とは関係ないので、私はそれを投稿しませんでした:FYI istは次のような形式のデータベースから読み込んだ文字列です: '123_123_123_abc:(abc:123)' – JRsz

+0

'$ created_new = array_fill 、5、 ''); '初期化はあなたの問題を解決するはずです。 –

答えて

3

このコードを修正するために助けが必要ではなく、理解していない作業バージョンを持っているように、すべてのPHPアレイが連想されています。口頭のスピーチで期待される「数値配列」のようなものはありません。キーは文字列か数字のどちらでもかまいませんが、問題はありません。キーは挿入順に並べられ、値によって暗黙のうちに順序付けされることはありません。あなたはこの動作に驚かないでしょう:

$arr['a'] = 1; 
$arr['c'] = 3; 
$arr['b'] = 2; 
// ['a' => 1, 'c' => 3, 'b' => 2] 

「数値配列」では全く同じ仕組みが働いています。

あなたがあなたの鍵をソートしたい場合は、ksortを使用して明示的に行う必要があります。

+0

真。あなたは 'print_r($ created_new)'を使って配列の内容を調べることができます。 – KinoP

+0

ええ、私はそれと一緒に生きなければならないと思います。これは少し奇妙ですが、私は将来の仕事のためにそれを念頭に置いています。ありがとうございました:) – JRsz

+0

@JRsz他の言語には、数値でインデックスされたリスト*と*キーと値のマップ*があります。 PHPはそれらの両方を1つのタイプの*連想型キー - 値マップ*に統合します。 – deceze

関連する問題