【问题标题】:Php Json Array Unset Not WorkingPhp Json数组未设置不起作用
【发布时间】:2016-09-17 03:12:05
【问题描述】:
  array(1) { 
  ["value"] => array(1000) { 
    [0]=> array(9) { 
      ["PartitionKey"]=> string(11)"AWT-GPI.com" 
      ["RowKey"]=> string(36) "0024a6ac-6cf1-454a-91b2-15bfec3a3d86" 
      ["Timestamp"]=> string(28) "2016-09-09T20:16:26.8674483Z" 
      ["Email"]=> string(20) "ginyoung30@gmail.com" 
      ["First_Name"]=> string(8) "Jennifer" 
      ["Hash"]=> string(32) "d656d0c21b8f3c14fe03232bb68d1b53" 
      ["IP_1"]=> string(0) "" 
      ["Last_Name"]=> string(5) "Young" 
      ["Username"]=> string(9) "flacobell" 
    } 
    [1]=> array(9) { 
      ["PartitionKey"]=> string(11) "AWT-GPI.com" 
      ["RowKey"]=> string(36) "002c00c4-e064-43e8-9dd8-319c8d6663bd" 
      ["Timestamp"]=> string(28) "2016-09-09T20:19:54.5500874Z" 
      ["Email"]=> string(22) "Glenn@flavorleague.com" 
      ["First_Name"]=> string(1) "G" 
      ["Hash"]=> string(32) "1444a7b2c86506158013d1175137eede" 
      ["IP_1"]=> string(0) "" ["Last_Name"]=> string(6) "Wilson" 
      ["Username"]=> string(13) "misterspeed76" 
    } 
  } 
}

就是使用这段代码的数组

$count = count($null_check);
for ($i = 0; $data < $count; $i++) {
    foreach ($null_check['value'][$i] as $key => $data) {
        $parsed_key = str_replace('_', ' ', $key);
        echo $parsed_key.': '.$data.'<br>';
    }
    echo '<br><br>';
}

我可以得到这个输出

PartitionKey: AWT-GPI.com
RowKey: 0024a6ac-6cf1-454a-91b2-15bfec3a3d86
Timestamp: 2016-09-09T20:16:26.8674483Z
Email: ginyoung30@gmail.com
First Name: Jennifer
Hash: d656d0c21b8f3c14fe03232bb68d1b53
IP 1: 
Last Name: Young
Username: flacobell


PartitionKey: AWT-GPI.com
RowKey: 002c00c4-e064-43e8-9dd8-319c8d6663bd
Timestamp: 2016-09-09T20:19:54.5500874Z
Email: Glenn@flavorleague.com
First Name: G
Hash: 1444a7b2c86506158013d1175137eede
IP 1: 
Last Name: Wilson
Username: misterspeed76

现在我想取消设置RowKeyTimestamp,但是当我在foreach 语句中这样做时

unset($null_check['RowKey'];

它不起作用,我为每个外部或内部创建一个单独的,不起作用,我使用 foreach 中分配的值不起作用。从字面上看,没有任何作用。这只是我有大约30个这样的部分。都是一样的格式,我只想去掉RowKeyTimestamp这两个键,怎么办?

【问题讨论】:

  • unset($null_check['RowKey']; 最后缺少),如果这是一个错字,那么unset($null_check['value'][$i]['RowKey']); 只能作为其内部数组使用。或使用unset($data['RowKey']); 取消设置
  • 你打开错误报告了吗?在文件顶部添加error reportingini_set("display_errors", 1); error_reporting(E_ALL);,您可能会遇到一些错误。但首先我不确定你是否知道你在用你的 for 和 foreach 循环做什么。首先计算你的数组,它只会返回 1,因为在第一个维度中你只有值 value =&gt; Array(...)
  • 这意味着您的 for 循环只进行 1 次迭代,而在您的 foreach 循环中,您只需遍历第一个子数组,基本上是 foreach($null_check["value"][0] as $key =&gt; $value)。因此,在那个 foreach 循环中,您可能会尝试取消设置该元素,但这是行不通的,因为您正在处理该元素的副本。因此,您要么想使用原始数组中的完整键,要么通过引用循环遍历元素。
  • 是的,这是一个错字,我确实使用了unset($data['RowKey']);,但它不起作用。 unset($null_check['value'][$i]['RowKey']); 也没有用。你说的参考是什么意思?所以我应该在 foreach 之外取消设置?那也行不通。那么除了删除之外,我可以跳过某些键还是删除更容易?
  • 您的输出与您的代码不匹配,也与您显示的数组不匹配。只需给我们一个minimal reproducible example

标签: php arrays json array-unset


【解决方案1】:

使用此代码

$count = count($null_check);
for ($i = 0; $i <= $count; $i++) {
    foreach ($null_check['value'][$i] as $key => $data) {
        $parsed_key = str_replace('_', ' ', $key);
        echo $parsed_key.': '.$data.'<br>';
        if(in_array($key,array('RowKey','Timestamp'))){
            unset($null_check['value'][$i][$key]);
        }
    }
    echo '<br><br>';
}
echo '<pre>';
print_r($null_check);
echo '</pre>';

【讨论】:

  • 代码:$count = count($null_check); for ($i = 0; $data &lt; $count; $i++) { foreach ($null_check['value'][$i] as $key =&gt; $data) { $parsed_key = str_replace('_', ' ', $key); echo $parsed_key.': '.$data.'&lt;br&gt;'; if(in_array($key,array('RowKey','Timestamp'))){ unset($null_check['value'][$i][$key]); } } echo '&lt;br&gt;&lt;br&gt;'; } 输出相同
  • 输出相同,但现在您的数组不包含 RowKeyTimestamp 。检查foreach 我已取消设置键
【解决方案2】:

您可以使用unset()array_diff_key(),方法如下:(只需将\n 更改为&lt;br&gt;

(Demo)

输入:

$array=[
    "value"=>[
        ["PartitionKey"=>"AWT-GPI.com",
         "RowKey"=>"0024a6ac-6cf1-454a-91b2-15bfec3a3d86",
         "Timestamp"=>"2016-09-09T20:16:26.8674483Z",
         "Email"=>"ginyoung30@gmail.com",
         "First_Name"=>"Jennifer",
         "Hash"=>"d656d0c21b8f3c14fe03232bb68d1b53",
         "IP_1"=>"",
         "Last_Name"=>"Young",
         "Username"=>"flacobell"
        ],
        ["PartitionKey"=>"AWT-GPI.com",
         "RowKey"=>"002c00c4-e064-43e8-9dd8-319c8d6663bd",
         "Timestamp"=>"2016-09-09T20:19:54.5500874Z",
         "Email"=>"Glenn@flavorleague.com",
         "First_Name"=>"G",
         "Hash"=>"1444a7b2c86506158013d1175137eede",
         "IP_1"=>"",
         "Last_Name"=>"Wilson",
         "Username"=>"misterspeed76"
        ]
    ]
];

方法#1:

foreach($array['value'] as $subarray){
    foreach(array_diff_key($subarray,['RowKey'=>'','Timestamp'=>'']) as $k=>$v){  // does not modify $array
        echo str_replace('_',' ',$k)," : $v\n";
    }
    echo "\n";
}

方法#2:

echo "\n---\n";

foreach($array['value'] as $subarray){
    unset($subarray['RowKey'],$subarray['Timestamp']);  // does not modify $array
    foreach($subarray as $k=>$v){
        echo str_replace('_',' ',$k)," : $v\n";
    }
    echo "\n";
}

输出:

PartitionKey : AWT-GPI.com
Email : ginyoung30@gmail.com
First Name : Jennifer
Hash : d656d0c21b8f3c14fe03232bb68d1b53
IP 1 : 
Last Name : Young
Username : flacobell

PartitionKey : AWT-GPI.com
Email : Glenn@flavorleague.com
First Name : G
Hash : 1444a7b2c86506158013d1175137eede
IP 1 : 
Last Name : Wilson
Username : misterspeed76


---
PartitionKey : AWT-GPI.com
Email : ginyoung30@gmail.com
First Name : Jennifer
Hash : d656d0c21b8f3c14fe03232bb68d1b53
IP 1 : 
Last Name : Young
Username : flacobell

PartitionKey : AWT-GPI.com
Email : Glenn@flavorleague.com
First Name : G
Hash : 1444a7b2c86506158013d1175137eede
IP 1 : 
Last Name : Wilson
Username : misterspeed76

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 2023-03-06
    • 2014-03-03
    • 2016-07-06
    • 1970-01-01
    • 2012-07-20
    • 2017-03-17
    • 2015-12-21
    相关资源
    最近更新 更多