Как убрать массив объектов в PHP - PullRequest
1 голос
/ 30 апреля 2020
    <?php
$test = '{
    "100": {
        "name": "Sports",
        "contentID": "100"
    },
    "200": {
        "name": "Village",
        "contentID": "200"
    }
}';
$idWiseData = json_decode($test,true);


$test2 = '[
    {
        "contentID": "100",
        "contentStatus": "active"
    },
    {
        "contentID": "200",
        "contentStatus": "active"
    },
    {
        "contentID": "300",
        "contentStatus": "active"
    }
]';
$allTopics = json_decode($test2,true);

foreach ($allTopics as $key => &$topic) {
        $contentInfo = [
            'contentStatus'     => $topic['contentStatus']
        ];
$topic['contentName']  = isset($idWiseData[$topic['contentID']]['name']) ? $idWiseData[$topic['contentID']]['name'] : null;
}
echo "<pre>";
print_r($allTopics);
?>

Над кодом работает нормально, я не получаю ожидаемый результат. на самом деле $allTopics имеет 3 объекта (contentID 100 & 200 и 300). $idWiseData имеет объект (contentID 100 & 200). Я хочу взять name значение из $ idWiseData и заменить на $ allTopics на основе contentID. У contentID 300 нет имени, поэтому этот объект не должен приходить.

Ожидаемый результат

 Array
(
    [0] => Array
        (
            [contentID] => 100
            [contentStatus] => active
            [contentName] => Sports
        )

    [1] => Array
        (
            [contentID] => 200
            [contentStatus] => active
            [contentName] => Village
        )

)

Я получаю вывод

 Array
(
    [0] => Array
        (
            [contentID] => 100
            [contentStatus] => active
            [contentName] => Sports
        )

    [1] => Array
        (
            [contentID] => 200
            [contentStatus] => active
            [contentName] => Village
        )

    [2] => Array
        (
            [contentID] => 300
            [contentStatus] => active
            [contentName] => 
        )

)

Пожалуйста, обновите мой код, пожалуйста.

Ответы [ 4 ]

0 голосов
/ 30 апреля 2020
    foreach ($allTopics as $key => &$topic) {
        $contentInfo = [
            'contentStatus'     => $topic['contentStatus']
        ];
$topic['contentName']  = isset($idWiseData[$topic['contentID']]['name']) ? $idWiseData[$topic['contentID']]['name'] : null;
if (is_null($topic['contentName'])) {
      unset($topic['contentName']);
  }
}

ИСПОЛЬЗУЙТЕ ЭТОТ КОД, ЭТО МОЖЕТ РЕШИТЬ ВАШУ ПРОБЛЕМУ.

0 голосов
/ 30 апреля 2020

Вы можете удалить запись из массива, используя array_slice . Но я бы порекомендовал вам изменить свой код и иметь третий массив, который должен быть вашим результатом, поэтому вам не нужно изменять какие-либо исходные данные.

0 голосов
/ 30 апреля 2020

Вы не удаляете индекс из массива, просто устанавливая contentName в ноль. Используйте unset для удаления индекса из массива.

Попробуйте это:

<?php
$test = '{
    "100": {
        "name": "Sports",
        "contentID": "100"
    },
    "200": {
        "name": "Village",
        "contentID": "200"
    }
}';
$idWiseData = json_decode($test,true);


$test2 = '[
    {
        "contentID": "100",
        "contentStatus": "active"
    },
    {
        "contentID": "200",
        "contentStatus": "active"
    },
    {
        "contentID": "300",
        "contentStatus": "active"
    }
]';
$allTopics = json_decode($test2,true);

foreach ($allTopics as $key => &$topic) {
        $contentInfo = [
            'contentStatus'     => $topic['contentStatus']
        ];
        if(isset($idWiseData[$topic['contentID']]['name'])){
            $topic['contentName'] = $idWiseData[$topic['contentID']]['name'];
        } else {
            unset($allTopics[$key]);
        }
}
echo "<pre>";
print_r($allTopics);
?>
0 голосов
/ 30 апреля 2020

Насколько я понимаю, вам нужно unset() индекс в массиве, если contentName равно null. Это может быть достигнуто с помощью unset ()

foreach ($allTopics as $key => &$topic) {
    // your code here ....

    if (is_null($topic['contentName'])) {
        unset(allTopics[$key]);
    }
}
...