Я пытаюсь создать уравнение массива, в котором значение массива будет приравнено к существующей последовательности, но я не могу отобразить его в массиве .. как мне это исправить?
$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
Другими словами, как одно значение $ht['day'] может соответствовать всем 1, 2, 3 и 4… ?!
Просто чтобы расширить вышесказанное ... когда вы писали if ($x == $ht['day']) ... на какой из четырех «дневных» элементов в вашем массиве вы ожидаете, что он будет ссылаться? Как вы думали, компьютер сможет определить разницу и понять, о чем вы говорите? Это не логично. Вам нужно дать каждому элементу в вашем массиве другой идентификатор.






Когда вы используете один и тот же ключ, вы перезаписываете свой ключ массива, поэтому у и у есть только одна запись в вашем массиве, вы можете попробовать что-то вроде этого:
<?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);
Если числа не всегда идут подряд, вы можете использовать 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);
Попробуйте
var_dump($ht)… Массив не может иметь один и тот же ключ несколько раз.