У меня есть массив, созданный из файла журнала, и я хочу создать новый массив, содержащий только имена игроков.
$list[2] — расположение имен игроков
if (preg_match_all('/^(.*?) Player "(.*)" (.*) /m', $open, $list))
{
foreach($list[2] as $name)
{
if (!in_array($name,$players))
{
$players[] = ["Player"=>$name];
}
}
}
var_dump($players);
Он добавляет имена игроков в массив, однако добавляет, даже если существует запись с именем в качестве значения.
** Отвечать ** Было решено после предложенного ответа с помощью
$gt = array_unique($list[2]);
foreach($gt as $name)
{
$players[] = ["Player"=>$name];
}
Ваша текущая проблема задокументирована здесь, stackoverflow.com/questions/4128323/…
Этот повторяющийся вопрос не является хорошим «указателем», потому что нет минимальный воспроизводимый пример. Намерение достаточно ясно для программистов, которые понимают ваш код, но с точки зрения качества контента было бы лучше иметь образец ввода и точный желаемый результат. Пожалуйста, никогда не добавляйте редактировать в свой вопрос "ответ" - это не задача вопроса. Вы можете избежать вызова array_unique()
, если вы выполняете ассоциативный толчок $players[$name] = ["Player" => $name];
, потому что дубликаты ключей на одном уровне массива не допускаются (они будут перезаписаны).
Вы можете использовать функцию array_unique
https://www.php.net/manual/en/function.array-unique.php
if (preg_match_all('/^(.*?) Player "(.*)" (.*) /m', $open, $list))
{
foreach($list[2] as $name)
{
$players[] = ["Player"=>$name];
}
}
$players=array_unique($players);
var_dump($players);
другое решение:
if (preg_match_all('/^(.*?) Player "(.*)" (.*) /m', $open, $list))
{
foreach($list[2] as $name)
{
if (!in_array(["Player"=>$name],$players))
{
$players[] = ["Player"=>$name];
}
}
}
$players=array_unique($players);
var_dump($players);
Пожалуйста, отметьте / проголосуйте, чтобы закрыть повторяющиеся вопросы вместо того, чтобы отвечать на них. Когда вы отвечаете на повторяющиеся вопросы, роботу Roomba становится сложнее выполнять свою важную работу. Мне нужно воспользоваться этим моментом, чтобы испортить романтику — в 2022 году, когда кто-то задает простой вопрос, обычно есть как минимум 5 дубликатов на выбор. Итак, еще раз, пожалуйста, не отвечайте на простые повторяющиеся вопросы.
$players[$name] = TRUE;
может сработать.. не похоже, чтоPlayer
понадобится.