如何在PHP中删除对象数组

问题描述 投票:1回答:4
    <?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 有3个对象(contentID 100 & 200 & 300)。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] => 
        )

)

麻烦谁来更新一下我的代码。

php php-7
4个回答
0
投票

据我了解,你需要的是 unset() 数组中的索引,如果 contentNamenull. 这可以通过使用 解集()

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

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

0
投票

你可以通过使用 数组切片. 但我建议你修改你的代码,并有第三个数组,必须是你的结果,所以你不需要改变任何源数据。


0
投票

你没有删除数组中的索引,只是将contentName设置为null。使用 解除 来删除数组中的索引。

试试这个。

<?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
投票
    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']);
  }
}

使用这个代码,也许能解决你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.