@symply_rabbit

Можно ли вывести оба параметра в одном foreach?

Добрый вечер! попробую сформулировать вопрос.

Есть набор значений свойства типа список. их отсортировываю по возрастанию. вывожу все кодом

<?
$property_enums = CIBlockPropertyEnum::GetList(Array(), Array("IBLOCK_ID"=>11, "CODE"=>"INDEKS_NAGRUZKI"));
while($enum_fields = $property_enums->GetNext()) {

$sort[] = intval($enum_fields[VALUE]);

$ids[] = $enum_fields[ID];
}

sort($sort);
foreach ($sort as $val) {

echo $val;
$newval[] =  $val;

?><br><?
} 
?>


Также отдельно могу вывести айди этих значений кодом

$ids[] = $enum_fields[ID];
foreach ($ids as $id) {

echo $id;

?><br><?
}


Можно ли подвести ID и значение (value) под один foreach, учитывая что сортировка нужна мне только для значения? (нужно для вывода option в select, где
<option value="<?//ID значения?>"><?//Значение?></option>
)
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
@symply_rabbit Автор вопроса
Ответ найден. короткий но рабочий код

в случае если один из массивов не число

$sorts[] = $enum_fields[VALUE];

$ids[] = $enum_fields[ID];
}

natsort($sorts);

foreach (array_combine($sorts, $ids) as $code => $name) {
    echo $code?>-<?=$name;?><br>
<?}
?>


В случае если значение точно число меняем функцию natsort($sorts); на sort($sorts);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Принятый ответ - это какой-то ужас.
Буквальный правильный ответ будет таким
while($enum_fields = $property_enums->GetNext()) {
    $sorts[] = $enum_fields[VALUE];
    $ids[] = $enum_fields[ID];
}
natsort($sorts);
foreach ($sorts as $i => $name) {
    echo $ids[$i], $name;
}

А правильный ответ будет, разумеется, в том, чтобы сразу создавать один массив
while($enum_fields = $property_enums->GetNext()) {
    $sorts[$enum_fields['ID']] = $enum_fields['VALUE'];
}
natsort($sorts);
foreach ($sorts as $id => $name) {
    echo "$id $name";
}


Если natsort не подходит, то использовать asort
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы