Заполнение данных для иногда отсутствующего индекса объекта - PullRequest
0 голосов
/ 18 января 2019

У меня есть массив, где я зацикливаюсь на объекте

foreach ($product->info->details as $details) {

    $skuItem[] = $details->dtl1;
    $skuItem[] = $details->dtl2;
    $skuItem[] = $details->dtl3;

}

Объект, на котором он находится, структурирован таким образом

"details": {
  "1": {
    "dtl1": "123",
    "dtl2": "TEst",
    "dtl3": "123"
  },
  "2": {
    "dtl1": "12",
    "dtl2": "Test",
    "dtl3": "153"
  }
},

Дело в том, что он может иметь только до 2 таких наборов, но иногда он имеет только один.

Есть ли способ разместить в моем цикле foreach так, чтобы, если он был только один, я мог в принципе "подделать" второй сет со всеми нулями? Я сопоставляю это с файлом и должен убедиться, что я по крайней мере всегда сопоставляю все 6 значений

Так что если объект выглядит как

"details": {
  "1": {
    "dtl1": "123",
    "dtl2": "TEst",
    "dtl3": "123"
  }

Я бы хотел создать свой массив как

0 => "123",
1 => "TEst",
2 => "123"
3 => "0",
4 => "0",
5 => "0"

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы можете создать шаблон того, что вы хотите, и заменить тем, что вы создаете в цикле:

$skuItem = array_replace(array_fill(0, 6, 0), $skuItem);

array_pad, вероятно, лучше для этого тривиального примера, но подумайте, если у вас есть различные значения:

$temp = array('x', 'y', 'z', 'x', 'y', 'z');
$skuItem = array_replace($temp, $skuItem);

Или:

$temp = array('x', 'y', 'z');
if(count($skuItem) != 6) {
    $skuItem = array_merge($skuItem, $temp);
}
0 голосов
/ 18 января 2019

После foreach вы можете заполнить ваш массив нулями:

foreach ($product->info->details as $details) {
    $skuItem[] = $details->dtl1;
    $skuItem[] = $details->dtl2;
    $skuItem[] = $details->dtl3;
}

Массив теперь содержит:

0 => "123"
1 => "TEst"
2 => "123"

Теперь запустите:

$skuItem = array_pad($skuItem, 6, 0);

Это добавит нули в конец массива, пока вы не получите в нем 6 элементов, поэтому массив теперь содержит:

0 => '123'
1 => 'TEst'
2 => '123'
3 => 0
4 => 0
5 => 0

Если вы хотите вместо строки ноль, просто передайте это как 3-й аргумент:

$skuItem = array_pad($skuItem, 6, '0');

Урожайность:

0 => '123'
1 => 'TEst'
2 => '123'
3 => '0'
4 => '0'
5 => '0'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...