iT邦幫忙

0

PHP 陣列 疑問

php

前二天自己試做一個陣列
程式內容:

<?php
$userData['andy'] = array(
    $tel='123456';
    $addr='0987654321';
);
$userData['cdefgl'] = array(
    略...
);
$userData['chijk'] = array(
    略...
);
$userData['almnopq'] = array(
    略...
);
問題處:
foreach ($userData as $index => $value){
    Echo $index[1] .'<br>';
}
?>

輸出是
a
c
c
a
將Echo $index[1] .'<br>'; 改為 Echo $index[2] .'<br>';則輸出
n
d
h
l
想請問$index[1]寫法的介紹及相關的說明參考.
我不解的是本來以為$index[1]會帶出$tel或$addr索引或值,結果跑出這個每個陣列的1個字...
已了解應該再用一個迴圈來讀$tel或$addr的資料

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

4
weiclin
iT邦高手 4 級 ‧ 2015-09-14 14:23:27
最佳解答

你給的程式連編譯都不會過..
猜你應該想這樣弄:

&lt;pre class="c" name="code">
&lt;?php
$userData['andy'] = array(
    'tel'=>'123456',
    'addr'=>'0987654321',
);
$userData['cdefgl'] = array(
    'tel'=>'223456',
    'addr'=>'1987654321',
);
$userData['chijk'] = array(
    'tel'=>'323456',
    'addr'=>'2987654321',
);
$userData['almnopq'] = array(
    'tel'=>'423456',
    'addr'=>'3987654321',
);
foreach ($userData as $index => $value){
    Echo $value['tel'] .'&lt;br>';
}

$index 是 key, 也就是 'andy' 之類的字串
字串使用陣列運算子取值就等於取第幾個字, 例如:

&lt;pre class="c" name="code">
echo "abcde"[0];

會得到 "a"

另外你的陣列也有問題:

$userData['andy'] = array(
$tel='123456',
$addr='0987654321',
);

這會等同於:

&lt;pre class="c" name="code">$userData['andy'] = array(
    '123456',
    '0987654321',
);

因為 $tel='123456' 是賦值運算, php 的賦值運算有回傳值, 跟 C 一樣
並且 $tel 與 $addr 會變成最後一個值

看更多先前的回應...收起先前的回應...
蟹老闆 iT邦大師 1 級 ‧ 2015-09-14 15:44:07 檢舉

'tel'=>'123456',

原來是這樣沒錯,發問時改錯了Orz
感謝解惑

蟹老闆 iT邦大師 1 級 ‧ 2015-09-14 15:49:08 檢舉

哈哈,一次解二個疑惑,謝謝啦,但要等六個小時...

既然是二維陣列,何不如此設定:

&lt;pre class="c" name="code">
$userData = [
    'andy' => [
        'tel' => '0987654321',
        'addr' => 'Yout Address'
    ],
    'cdefgl' => [
        'tel' => '0912345678',
        'addr' => 'Your Address'
    ]
];

不過要php 5.4以上才能使用這種格式寫法就是了。

是說那個頭像……蟹老闆?

蟹老闆 iT邦大師 1 級 ‧ 2015-09-14 16:22:47 檢舉

tkdmaf提到:
蟹老闆?

呵,是丫,最近看了php的書自己做幾題看看,果然不太適合我囧囧囧

我要發表回答

立即登入回答