2015-12-02 2 views
-1

У меня есть динамически сгенерированный массив, содержащий около 25 числовых значений, выбранных из столбца таблицы базы данных. Я затем извлечения этих значений для последующего использования с функцией Еогеаспа как это:Как сбрасывать динамически генерируемый ключ php-массива?

$array[] = $row['table_colum_name']; 
foreach($array as $key => $value){ 
$$key = $value; 
$value1 = $array['0']; 
$value2 = $array['1']; 
... 
$value25 = $array['24']; 

Проблема иногда, для некоторых запросов, есть менее 25 значений, возвращаемые в $ массива [], что создает проблемы в получении правое значение $ value получается с помощью клавиш, как указано выше. Например, если результат не найден в позиции 24, тогда $ array ['23 '] будет фактически заполнен результатом $ array ['24'], что испортит весь набор результатов вниз по течению от него.

Я попытался следующие, чтобы увидеть, если есть результат для конкретного ключа:

if (array_key_exists('23', $array)) { 
echo "The '23' element is present in the array"; 
} 

, но не похоже, чтобы быть в состоянии подобрать случаи, в которых Eсть недостающий ключ/значение.

Любые предложения с благодарностью!

+0

В чем смысл этого '$$ key = $ value; $ value1 = $ array ['0']; '? Почему бы не использовать сами массивы? – sectus

+0

Причина была в том, что я хотел убедиться, что у меня есть нужные клавиши, при попытке отладить проблему. Я мог бы использовать сам массив, но я все еще сталкиваюсь с той же проблемой. – Cucurigu

+0

Почему вы не используете array_values ​​и в вашем цикле $ value [$ key] = что-то? Но тогда почему вы не используете сам массив? – cpugourou

ответ

0

Трудно представить пример кода, который будет работать отлично, так как ваш вопрос и ваш код выше оставляют несколько деталей, но в принципе, если я правильно интерпретирую ваш вопрос, что-то очень похожее на это должно работать:

for($x = 1; $x <= 25; $x++) { 
    $foo = 'value' . $x; 

    if (isset($array[$x-1])) { 
     $$foo = $array[$x-1]; 
    } 
    else { 
     $$foo = ''; 
    } 
} 

Так предполагается, что ваш массив имеет индексы в диапазоне «0» до «24», с, возможно, несколько записей не хватает, вы будете в конечном итоге с переменными $value1 до $value25 набора с соответствующими элементами из массива (например, $ value1 = $ array ['0'] и т. д.), но там, где отсутствует элемент (например, array ['6']), тогда соответствующая переменная (например, $ value7) будет установлена ​​в пустую строку ,

Я думаю, что это самое лучшее, самое защитное решение, о котором я мог думать.

UPDATE

Обновленная версия на основе новой информации в комментариях:

foreach($array as $key => value) { 
    $foo = 'value' . $key + 1; 

    if (isset($array[$key])) { 
     $$foo = $array[$key]; 
    } 
    else { 
     $$foo = ''; 
    } 
} 

Так что, если вы хотите $value204 быть установлен на значение $array['203'] когда $array['203'] существует, оставьте + 1 во втором линия.

+0

Спасибо за предложение, @JamesG! Это выглядит многообещающе. Я должен был упомянуть, что элементы массива не являются последовательными числами, а скорее порядком чисел между 203 и 646, упорядоченными поэтапно. Как вы могли бы написать код выше для такой последовательности? – Cucurigu

+0

Итак, чтобы проверить, существует ли $ array [203], тогда значение $ value204 должно быть установлено независимо от значения $ array [203]? – JamesG

0

Еще раз спасибо за ваши ответы.

В конце концов, то, что я закончил, заключалось в том, чтобы перенести мое решение в SQL-запрос и использовать правильное внешнее соединение, чтобы сохранить нулевые результаты, когда они происходят, что позволяет поддерживать постоянный счетчик массивов, что в свою очередь позволяет мне получать значения массива в предсказуемом, последовательном порядке.

Смежные вопросы