Ответ 1
Вы можете использовать array_fill_keys
:
$array = array(
1 => 231,
2 => 432,
3 => 324
);
$array = array_flip($array);
$array = array_fill_keys(array_keys($array), 1);
Привет, спросите, есть ли способ сделать это без foreach ($ array as $k = > $v). Я знаю, что это сработает, но я ищу более элегантный способ, если вы знаете. Итак, мой массив выглядел так:
1 = 231
2 = 432
3 = 324
Я перевернул его, и он стал: 231 => 1, 432 =>2, 324 => 3
. Теперь мне нужно установить все значения в '1'
Вы можете использовать array_fill_keys
:
$array = array(
1 => 231,
2 => 432,
3 => 324
);
$array = array_flip($array);
$array = array_fill_keys(array_keys($array), 1);
array_fill_keys() должен быть тем, что вам нужно:
$keys = array_keys($yourArray);
$filled = array_fill_keys($keys, 1);
Для PHP > 5.3 вы можете использовать анонимные функции.
array_walk($array,function(&$value){$value=1;});
Примечание: значение передается по ссылке.
Я считаю, что вы ищете эту функцию: array_fill()
Из приведенной выше ссылки:
"Заполняет массив с числовыми значениями значения параметра значения, ключи, начинающиеся с параметра start_index."
Хотя если ваши индексы не являются численными и/или не перечислены (скажем, от 231 до 324 включительно), то вам может быть лучше, как говорит Ракета, array_fill_keys() или ваш обычный foreach.
Я получил этот пост с тем же вопросом, но в итоге я получил еще один пример.
Зачем использовать array_flip + array_keys вместо простого использования array_values?
$array = array(
1 => 231,
2 => 432,
3 => 324
);
$array = array_fill_keys(array_values($array), 1);
Любой метод, который вы вызываете, например array_map или fill_keys, все равно будет использовать цикл для итерации по массиву. Похоже, вы хотели бы что-то вроде array_map, которое можно найти здесь
Если вы считаете это более элегантным, каждому свое:)
array_replace(array_flip($columns), array_fill_keys($columns, 0));