2016-07-21 11 views
1

Мне интересно, если array_column сохраняет порядок элементов массива, поэтому, когда я вызываю функцию дважды в том же массиве, я могу доверять полученным массивам. Мне нужно работать таким образом, потому что в коде мне нужно сделать много операций только с определенными данными (один из ключей, в примере, id), и в конце концов используйте оба из них (в примере id и qty), чтобы вставить в дБ.PHP array_column несколько ключей того же порядка?

Пример:

QUERY: SELECT id, qty FROM items ... 
CONVERTED INTO ASSOCIATIVE ARRAY: 
$array = [ 
    ['id' => 1, 'qty' = 2], 
    ['id' => 2, 'qty' = 4] 
]; 

$itemsIds = array_column($array, 'id'); 
$itemsQty = array_column($array, 'qty'); 

Могу ли я сделать ?:

for($i = 0; $i < count($array); $i++) { 
    echo $itemsIds[$i] . $itemsQty[$i]; 
} 

И я всегда получите правильные данные для каждого элемента?

+0

не совсем уверен, что вы пытаетесь acomplish с кодом выше, если вы можете объяснить, что вы пытаетесь сделать, это могло бы помочь. Короче говоря, ответ отрицательный, потому что вы используете 'array_unique', который снимает повторяющиеся значения, что означает, что ваши два массива могут быть двух разных длин. – cmorrissey

+0

Почему бы вам не получить его просто с запросом? – Grommy

+1

'array_unique()' - проблема, потому что после этого массивы могут иметь разную длину. И, похоже, нет никаких оснований делать то, что вы делаете. Вы можете объяснить? – AbraCadaver

ответ

1

Поскольку результат DB основан на строках (обычно), каждый столбец будет иметь значение (даже если это NULL). Поэтому, если вы каким-то образом не столкнетесь с результатом, вы должны быть в безопасности. В моем коде я делаю практически то же самое.

0

Что делать, если вы получаете все значения, которые нужно через SQL запрос и напечатать его с чем-то вроде:

$arrayLength = count($array); // Better optimization than do it in every loop 
for($i = 0; $i < $arrayLength; $i++) { 
    echo $array[$i]['id'] . $array[$i]['qty']; 
} 

Это позволит Вам убедиться, что весь матч со всеми, и что они имеют одинаковое количество строк ,

1

Из вашего кода кажется, что вы хотите сохранить ключи, соответствующие его значению, правильно после использования array_column дважды.

Но для вас информацию вы можете получить это с помощью array_column только один раз, как это:

$items = array_column($array, 'qty', 'id') 

Теперь вы получите ассоциативный массив, ключи, каждый, строки и идентификатор значения являются каждый строки шт.

значение третьего параметра по array_column является

Колонка для использования в качестве индекса/ключей для возвращаемого массива. Это значение может быть целым ключом столбца, или это может быть имя строкового ключа.

Вы можете найти более объясняет и примеры из документации: http://php.net/manual/en/function.array-column.php