PHP循环外获取完整数组而非最后值的问题求助
解决PHP循环中无法收集完整数组的问题
嘿,我明白你的困扰了——你现在的代码里,每次循环都会把$distrito1整个覆盖成新的数组,所以循环结束后它自然只保留最后一次迭代的结果。要收集所有迭代的$distrito1[0]值,你需要把它变成一个数组容器,每次循环往里面追加元素,而不是直接覆盖。
核心问题修正(基于你的原始代码)
咱们先针对你现有的代码做最小修改,实现收集完整数组的需求:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.geonames.org/searchJSON?username=demo&country=pt&lang=pt&q=lisbon&fcode=ADM2&adminCode1=14&style=SHORT&maxRows=1000"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Accept: application/json" )); $response = curl_exec($ch); curl_close($ch); $frase_script = explode(',',$response); $frase = $frase_script[0]; $palavra = explode(':',$frase); $numero = $palavra[1]; $frase_script = explode('"name":',$response); // 关键修改:初始化一个空数组来收集所有值 $distrito1 = []; echo '['; for ($x = 1; $x < $numero; $x++) { $frase = $frase_script[$x]; $currentItem = explode(',',$frase); // 把当前值追加到数组里,而不是覆盖整个变量 $distrito1[] = $currentItem[0]; echo $currentItem[0]; } echo ']'; // 现在$distrito1就是完整的数组了,你可以直接输出或者处理它 echo "<br>完整数组内容:"; print_r($distrito1); // 如果要逐个输出数组元素: echo "<br>逐个输出:"; foreach($distrito1 as $item) { echo $item . " "; }
更优雅的方案:直接解析JSON(推荐)
其实你手动用explode拆分JSON字符串的方式非常容易出错(比如字段格式变化就会失效),PHP自带了json_decode函数可以直接把JSON转成数组/对象,这才是处理API返回的正确姿势:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.geonames.org/searchJSON?username=demo&country=pt&lang=pt&q=lisbon&fcode=ADM2&adminCode1=14&style=SHORT&maxRows=1000"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Accept: application/json" )); $response = curl_exec($ch); curl_close($ch); // 直接把JSON响应转成关联数组 $data = json_decode($response, true); // 初始化收集数组 $distrito1 = []; echo '['; // 遍历返回的geonames列表 foreach($data['geonames'] as $place) { $distrito1[] = $place['name']; echo $place['name']; } echo ']'; // 输出完整数组 echo "<br>完整数组内容:"; print_r($distrito1);
这样代码更清晰,也不会因为JSON格式的小变化而崩溃,维护起来方便很多。
内容的提问来源于stack exchange,提问作者Alexandre
相关产品推荐
相关产品推荐

