重複の可能性:
PHP で同時に 2 つの連想配列を反復処理する
私は2つの配列$name[]
と$type[]
. このように foreach ループを介してこれらの配列を出力したいのですが、
<?php
foreach($name as $v && $type as $t)
{
echo $v;
echo $t;
}
?>
これが間違った方法であることはわかっているので、正しい方法を教えてください。
重複の可能性:
PHP で同時に 2 つの連想配列を反復処理する
私は2つの配列$name[]
と$type[]
. このように foreach ループを介してこれらの配列を出力したいのですが、
<?php
foreach($name as $v && $type as $t)
{
echo $v;
echo $t;
}
?>
これが間違った方法であることはわかっているので、正しい方法を教えてください。
そんなことはできません。次のいずれかを実行する必要があります。
for
:for ($i = 0; $i < count($name); ++$i) {
echo $name[$i];
echo $type[$i];
}
考えられる問題: 配列には数値でインデックスを付ける必要があり、それらの長さが同じでない場合は、どの配列を使用するかが非常に重要になりますcount
。短い配列をターゲットにするか、範囲外の長い配列にインデックスを付けないように適切な手段を講じる必要があります。
each
:reset($name); // most of the time this is not going to be needed,
reset($type); // but let's be technically accurate
while ((list($k1, $n) = each($name)) && (list($k2, $t) = each($type))) {
echo $n;
echo $t;
}
考えられる問題: 配列の長さが同じでない場合、「短い」配列がなくなると要素の処理が停止します。を交換することでそれを変更でき||
ますが、常に意味のある値を持つとは限らないの&&
いずれかを考慮する必要があります。$n
$t
array_map
:// array_map with null as the callback: read the docs, it's documented
$zipped = array_map(null, $name, $type);
foreach($zipped as $tuple) {
// here you could do list($n, $t) = $tuple; to get pretty variable names
echo $tuple[0]; // name
echo $tuple[1]; // type
}
考えられる問題: 2 つの配列の長さが同じでない場合、短い方が null で拡張されます。これを制御することはできません。また、このアプローチは便利ですが、追加の時間とメモリを使用します。
配列が常に同じ長さで、要素が一意で、すべての値$name
が文字列または整数である場合は、次を使用できますarray_combine
。
foreach (array_combine($name, $type) as $v => $t) {
echo $v, $t;
}
array_combine
最初の配列の要素がキーを提供し、2 番目の配列の要素が値を提供する新しい配列を作成します。
あなたはこのようにすることができます
for ($i = 0; $i < max(count($name), count($type)); $i++) {
if(isset($name[$i]))
echo 'name[' . $i . '] = ' . $name[$i];
if(isset($type[$i]))
echo 'type[' . $i . '] = ' . $type[$i];
}