Я не могу получить одно и то же значение в массиве. Первое значение просто не появляется в выводе. Код сравнивает идентификаторы и объединяет значения, которые соответствуют идентификатору. Это мой код:
<?php
$pic = array ('1.jpg','2.jpg','3.jpg');
$picid = array('aqua','green','orange');
$size = array('12','24','12');
$sizeid = array ('aqua','green','orange');
$newarray2 = array();
foreach (array_combine($pic, $picid) as $outpic => $outid) {
foreach (array_combine($size, $sizeid) as $outsize => $outsizeid) {
if ($outid == $outsizeid) {
$result = "$outpic $outsize";
$newarray2[]= $result;
} }
$result1 = implode(",", $newarray2);
echo $result1;
$newarray2 = array();
}
?>
Желаемый результат, который я хочу получить:
1.jpg 12
2.jpg 24
3.jpg 12
Но когда я запускаю код, я получаю это:
2.jpg 24
3.jpg 12
Я думаю, что первое значение как-то перезаписывается, но я не знаю, как это обойти. Что я делаю неправильно?
У вас есть несколько ключей на 12, используется только последний.
В приведенном ниже примере мы добавляем дополнительный слой к клавишам, чтобы ключи могли перекрываться.
$result = array();
foreach ($size as $i => $key) {
$result[] = array($key => $sizeid[$i]);
}
foreach ($result as $value) {
foreach($value as $outsize => $outsizeid){
if ($outid == $outsizeid) {
$result = "$outpic $outsize";
$newarray2[]= $result;
}
}
}
Это имеет больше смысла, если учесть результат вызова «array_combine».
$picCombo = array_combine($pic, $picid);
$picCombo = array(
'1.jpg' => 'aqua',
'2.jpg' => 'green',
'3.jpg' => 'orange',
);
$sizeCombo = array_combine($size, $sizeid);
$sizeCombo = array(
'12' => 'aqua',
'24' => 'green',
'12' => 'orange',
);
В PHP синтаксис в определениях массивов и операторах foreach:
key => value
Обратите внимание, что ваши ключи и значения противоположны тому, что вы хотите.
Итак, решения: