@Aqulus

Как начинать массив с 1, а не с 0 в php?

Здравствуйте. Требуется начинать массив PHP с нуля, так как ключ используется в юзернеймах.

Использую код для подсчета юзеров и вставляю ключи по порядку в их юзернеймы. Возникла проблема, что один юзер с ником "Администратор #0", а мне нужно, чтобы массив начинался с единички и продолжал (1,2,3,4,5,6,7.........15)

Код:
protected function getServiceAccountId()
	{
		$serviceAccounts = $this->finder('XF:User')
			->where('is_service_account', true)
			->order('user_id')
			->fetch()->toArray();

		foreach (array_values($serviceAccounts) as $key => $serviceAccount)
		{
			if ($serviceAccount->user_id == $this->user_id)
			{
				return $key;
			}
		}

		return $serviceAccounts;
	}


Искал в гугле, но ничего не нашёл, помогите, пожалуйста.
  • Вопрос задан
  • 474 просмотра
Решения вопроса 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
А такой элементарнейший код нужно искать в Google?

$tmp = array();foreach($serviceAccounts as $k => $v){$tmp[$k + 1] = $v;}
return $tmp;
Ответ написан
Комментировать
HardBot
@HardBot
back-end, front-end developer
array_combine()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ValeriuCutebov
@ValeriuCutebov
В PHP массивы всегда начинаются с нуля, но вы можете создать массив, который начинается с 1, путем использования функции array_combine(), которая создает новый массив, используя один массив в качестве ключей, а другой - в качестве значений.

В вашем случае, вы можете создать массив со значениями ключей, начиная с 1, используя цикл foreach для перебора пользователей и добавления их в новый массив с помощью функции array_combine(). Затем вы можете использовать новый массив вместо исходного для поиска пользователей и определения их индексов.

protected function getServiceAccountId()
{
  $serviceAccounts = $this->finder('XF:User')
    ->where('is_service_account', true)
    ->order('user_id')
    ->fetch()->toArray();

  $keyValues = range(1, count($serviceAccounts));
  $keyedAccounts = array_combine($keyValues, $serviceAccounts);

  foreach ($keyedAccounts as $key => $serviceAccount)
  {
    if ($serviceAccount->user_id == $this->user_id)
    {
      return $key;
    }
  }

  return $keyedAccounts;
}

В этом примере мы используем функцию range() для создания массива с числами от 1 до количества пользователей в $serviceAccounts. Затем мы используем array_combine(), чтобы создать новый массив $keyedAccounts, используя этот массив чисел в качестве ключей и $serviceAccounts в качестве значений.

Далее мы используем новый массив $keyedAccounts вместо $serviceAccounts в цикле foreach для поиска пользователей и определения их индексов.

Надеюсь, это поможет вам решить вашу проблему!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы