如何将Python转PHP后的多组数据合并为单个数组?
解决方案:合并独立数组并处理Python字节串格式数据
看起来你现在需要把两个独立的PHP数组合并成一个包含子数组的单个数组,同时还要处理那些从Python传递过来的字节串格式数据对吧?我来给你一步步解决这个问题:
1. 合并两个独立数组
首先,你手里的两个独立数组,只需要简单把它们放到一个新数组里,就能得到包含子数组的单个数组了。或者用array_merge()函数也能实现:
// 你的两个原始数组 $salon1 = [ 'fri_hours' => "b'9:00 AM \xe2\x80\x93 8:00 PM'", 'wed_hours' => "b'9:00 AM \xe2\x80\x93 8:00 PM'", 'sun_hours' => "b'Closed'", 'photo_reference' => '', 'phone_number' => b'+1 212-354-1006', 'state' => b'New York', 'country' => b'United States', 'place_id' => 'ChIJ8cFYDKpZwokRpC04mEYm20s', 'thu_hours' => "b'9:00 AM \xe2\x80\x93 8:00 PM'", 'business_name' => b'CarLeo Hair Salon', 'address' => b'22West 38th Street', 'city' => b'New York', 'mon_hours' => "b'9:00 AM \xe2\x80\x93 6:00 PM'", 'type' => 'beauty salon', 'sat_hours' => "b'Closed'", 'tue_hours' => "b'9:00 AM \xe2\x80\x93 8:00 PM'", 'postal_code' => '10018', 'website' => 'http://www.carleohairsalon.com/', 'rating' => 4.6 ]; $salon2 = [ 'fri_hours' => "b'8:00 AM \xe2\x80\x93 8:00 PM'", 'wed_hours' => "b'8:00 AM \xe2\x80\x93 8:00 PM'", 'sun_hours' => "b'Closed'", 'photo_reference' => 'CmRaAAAAe8XIMwcPu3uhohYjJ-dQt69rtZ-x2XJ-I28USF-LphSaVH4Gt-_JUmB06TGnOKKmAqSjnhGuFqUKb7pitV1twViGVE7znVYLSdRYZ72LKjtlXT47YapfEreCmd9lK1R8EhCEJ2Pb2Fpe2sbfbOF3hXgmGhRaJbdZKiF8S0GxdzVj3r7mQphVtw', 'phone_number' => b'+1 212-688-6498', 'state' => b'New York', 'country' => b'United States', 'place_id' => 'ChIJ0SFDYuVYwokRXJvyfmR9kec', 'thu_hours' => "b'8:00 AM \xe2\x80\x93 8:00 PM'", 'business_name' => b'Mizu Salon', 'address' => b'505Park Avenue', 'city' => b'New York', 'mon_hours' => "b'10:00 AM \xe2\x80\x93 6:00 PM'", 'type' => 'beauty salon', 'sat_hours' => "b'9:00 AM \xe2\x80\x93 7:00 PM'", 'tue_hours' => "b'8:00 AM \xe2\x80\x93 7:00 PM'", 'postal_code' => '10022', 'website' => 'http://www.mizuforhair.com/', 'rating' => 4.4 ]; // 合并成单个包含子数组的数组(两种方式选其一即可) $combinedSalons = [$salon1, $salon2]; // 或者:$combinedSalons = array_merge([$salon1], [$salon2]);
2. 处理Python字节串格式的数据
你会发现很多字段是b'xxx'或者"b'xxx'"的格式,这是Python的bytes对象被转成字符串后的遗留格式,我们需要把它们转换成正常的UTF-8字符串。可以写一个辅助函数来处理:
function decodePythonBytes($value) { // 处理带b'前缀和'后缀的字符串 if (is_string($value) && str_starts_with($value, 'b\'') && str_ends_with($value, '\'')) { $cleaned = substr($value, 2, -1); // 解码UTF-8特殊字符(比如em dash) return html_entity_decode($cleaned, ENT_QUOTES, 'UTF-8'); } // 处理PHP原生的bytes类型(PHP 7.1+支持) elseif (is_bytes($value)) { return (string)$value; } // 其他类型直接返回 return $value; } // 遍历合并后的数组,批量处理每个字段 foreach ($combinedSalons as &$salon) { foreach ($salon as $key => &$value) { $value = decodePythonBytes($value); } unset($value); // 释放引用避免后续意外修改 } unset($salon);
3. 验证最终结果
现在你可以打印处理后的数组,看看是否符合预期:
print_r($combinedSalons);
这时候所有字段都会是正常的可读字符串,比如business_name会显示为CarLeo Hair Salon,fri_hours会显示为9:00 AM – 8:00 PM(em dash显示正常)。
为什么之前的foreach没得到预期结果?
大概率是你没正确合并两个数组,或者没有处理这些字节串格式的数据,导致输出时还是看到带b'的内容,误以为循环没生效。另外要注意,PHP中遍历修改数组元素时,需要用&引用元素,否则修改的只是临时副本,不会影响原数组。
内容的提问来源于stack exchange,提问作者Dhaval
相关产品推荐
相关产品推荐

