2011-01-16 8 views
0

デフォルトでは、mysql_fetch_arrayは数値と連想配列togeatherを返します。この関数は値を取得できる間に読み込みに便利です"mysql_fetch_array"の操作に関する質問

echo arr [1]; //円 または echo arr ["shape"]; // circle

私はPHPには新しいので、フェッチされた配列の値を変更したいときに問題にぶつかります: arr [1] = square;

私はarr ["shape"]も 'square'と思っていましたが、私は間違っていました。 arr ["shape"]はまだ 'circle'のままです。 明らかに両方の値を 'circle'に変更する必要があります。

さらに、変更されたシェイプ配列(2D配列)を返す関数を書きました。私が最初のコードを使用した場合、私は別の結果を得ました。

2行目のコードです。

function ChangeShape($arr) 
     { 

      for ($i=0; $i<$count($arr); $i++) 
      { 
     1. $arr[$i]["shape"] = 'square'; // fail to return changed $arr - it is (probably) reference to number counterpart 

     2. $arr[$i][2] = 'square';  // this WILL return changed $arr 
      } 
      } 
      return $arr; 
     } 

私の質問: 1.私は一度に両方の値を変更することが可能なPHPでの任意の技術はありますか? 2.私のアプリでは、配列値にアクセスするためにassocニックネームを使用します。しかし、数値エイリアスを同時に変更することができない場合は、

とするのが一番簡単ですか?

これを最後まで読んでいただきありがとうございます...ご返信ください。

ありがとうございます。あなただけの単純な配列内のデータが必要な場合

+2

をこれは少し複雑に聞こえます。最初に存在する索引付きバージョンと結合バージョンの両方が必要なのはなぜですか?通常は、数値的に索引付けされた索引付けされた索引付けされた索引付けされた索引付けされた索引付けされた索引付けされた索引付けされた索引付けされた索引の結果を別の変数にフェッチし、そこで処理します。 –

+0

@Pekka>いくつかの場所があります。私は数値表現を使用し、時にはよりフレンドリなassoc(文字列)を使用します。私は他のプログラミング言語で、1つまたは別のオプションをインターチャージで使用するために使用されました。私はPHPで学習過程にあります。しかし、あなたがちょうど言ったのは悪い考えではありません。 – lyborko

+0

ほとんどの場合、数値表現を使うのはひどい考えです。なぜなら、あなたのクエリを少し変更すれば、あらゆる種類の事柄が破られる可能性があるからです。矛盾する理由はそれほど少なくないと思う。いくつかの場所で数値を使用し、他の場所で数値を使用する理由はありますか? –

答えて

0

あなたはそれをつかむと、あなたは常にわずか数配列にそれを置くことによって、それを簡素化することができます:それはスーパー明確なようで、なぜあなたのデータをしません

$query = "SELECT * from myTable"; 
$result = mysql_query($query) or die(mysql_error()); 
$newArray = array(); 

$i=0; 
while($row = mysql_fetch_array($result)){ 
    array_push( $newArray, $row[$i]['name']); 
} 
print_r($newArray); 
$newArray[4] = "some other value than what came from the db"; 
print_r($newArray); 

それがそうであるように複雑に戻ってきていますが、これはそれを明確にするのに役立ちます。

0

実際に数値インデックスを取得する必要はありますか?少なくとも投稿した内容に基づいて、mysql_fetch_assocを呼び出して連想型の配列だけを取得したいと思うようです。

mysql_fetch_arrayによって返される配列内の "エイリアス"は、実際にエイリアスではありません。インデックス配列に2回、数値インデックスで1回、列名で1回挿入されます。両方を変更する唯一の方法は、それらの両方に目的の値を割り当てることです。

+0

>それは私が起こることを恐れているものです。デバッガを使用して何が起こっているのかを確認したところ、2番目の「エイリアス」の値はその数値への参照によって与えられたようです。その参照を変更すると、最後に何も変わりませんでしたが、数値を変更すると返されたテーブルが変更されました... – lyborko

0

この例を参照してください。それがうまくいかない理由がわかります。それはリファレンスではなく、動作します。あなたがこの機能を持っていた場合、あなたはこのようなあなたのアレイを構築することができ:

<? 

$a='dog'; 
$b='cat'; 

$arr=array ('a' => &$a, 1 => &$a,'b' => &$b,'2' => &$b); 

print_r($arr); 

$a='horse'; 

print_r($arr); 

$arr[1]='cow'; 

print_r($arr); 

結果:

Array 
(
    [a] => dog 
    [1] => dog 
    [b] => cat 
    [2] => cat 
) 

Array 
(
    [a] => horse 
    [1] => horse 
    [b] => cat 
    [2] => cat 
) 
Array 
(
    [a] => cow 
    [1] => cow 
    [b] => cat 
    [2] => cat 
) 
+0

それは理解できます。私は私の仕事を簡素化しなければならないと思う... – lyborko