Не могу выполнить уравнение массива в php

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

$ht = array('day' => 1,'day' =>2,'day' =>3,'day' =>4);                          
for ($x = 1; $x <= 10; $x++) {
    if ($x == $ht['day']){
        echo 'x';
    }else{
        echo $x;
    }
}

Что я ожидаю xxxx5678910, но я привожу 123x45678910

Попробуйте var_dump($ht)… Массив не может иметь один и тот же ключ несколько раз.

deceze 19.07.2018 10:19

Другими словами, как одно значение $ht['day'] может соответствовать всем 1, 2, 3 и 4… ?!

deceze 19.07.2018 10:20

Просто чтобы расширить вышесказанное ... когда вы писали if ($x == $ht['day']) ... на какой из четырех «дневных» элементов в вашем массиве вы ожидаете, что он будет ссылаться? Как вы думали, компьютер сможет определить разницу и понять, о чем вы говорите? Это не логично. Вам нужно дать каждому элементу в вашем массиве другой идентификатор.

ADyson 19.07.2018 10:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
3
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Когда вы используете один и тот же ключ, вы перезаписываете свой ключ массива, поэтому у и у есть только одна запись в вашем массиве, вы можете попробовать что-то вроде этого:

<?php

$ht = array('day1' => 1,'day2' =>2,'day3' =>3,'day4' =>4);
var_dump($ht);                          
for ($x = 1; $x <= 10; $x++) {
    if (isset($ht['day' . $x])) {
        if ($ht['day' . $x] == $x){
            echo 'x';
        } 
    } else{
            echo $x;
        }
}
?>

Возвращаться :

xxxx5678910
Ответ принят как подходящий

Это ваш массив:

$ht = array('day' => 1,'day' =>2,'day' =>3,'day' =>4);

Если вы просто сделаете var_dump($ht);, вы увидите, что у вас есть:

array (size=1)
    'day' => int 4

Так что попробуйте это, чтобы получить то, что хотите:

$ht = array(1 => 1, 2 => 2, 3 => 3, 4 => 4);                          
for ($x = 1; $x <= 10; $x++) {
    if (!empty($ht[$x])){
        echo 'x';
    }else{
        echo $x;
    }
}

Выход: xxxx5678910

У вас есть несколько способов добиться этого, это только один из других :)

Вам вообще не нужно зацикливаться, чтобы получить ожидаемый результат. Вы можете использовать range () для создания массива с числами от 1 до 10, как в цикле. Затем array_diff находит числа не в массиве $ ht, чтобы их можно было повторить с помощью implode.

$ht = array(1 => 1, 2 => 2, 3 => 3, 4 => 4); 
$range = range(1,10);

$diff = array_diff($range, $ht); // [5,6,7,8,9,10]

echo str_repeat("x", count($ht)) . implode("", $diff);

https://3v4l.org/ZCU15


Если числа не всегда идут подряд, вы можете использовать array_intersect, array_fill и array_flip, чтобы создать новый массив с «x» вместо чисел в массиве $ ht.

Затем используйте array_replace, чтобы заменить числовые значения на «x» и вывести с помощью implode.

$ht = array(1 => 1, 2 => 2, 3 => 3, 4 => 9); 
$range = range(0,10);
unset($range[0]); // unset 0 since you want 1 as lowest
$x = array_intersect_key(array_fill(1,max($ht), "x"), array_flip($ht));
// $x = [1=>"x", 2=>"x", 3 => "x", 9=>"x"]

$new = array_replace($range, $x);

echo implode("", $new);

https://3v4l.org/gtSl9

Другие вопросы по теме