数组问题求解!

一起混吧 2011-02-14 06:24:02

$arr=array( array('id'=>1,'P_ID'=>'0','name'=>'php新闻'), array('id'=>3,'P_ID'=>'1','name'=>'asp新闻'), array('id'=>2,'P_ID'=>'2','name'=>'java新闻'),array('id'=>5,'P_ID'=>'0','name'=>'linux新闻') );

现求一个函数,能根据传入的P_ID值分别取出元素来放到一个新的数组当中去,比如我传入P_ID=0,则取出arr[0]和arr[3]组成一个新的数组,各位前辈有什么好办法?谢谢了! 还有为什么我下面这个函数不行啊。哪里错了!请求高手解答!

function getNode($pt=0) {
for ($i = 0; $i < count($arr); $i++) {
if($arr[$i]["P_ID"]=$pt){
$row[]=$arr[$i];

}
}
return $row;
}

print_r(getNode());






...全文
153 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
一起混吧 2011-02-15
  • 打赏
  • 举报
回复
谢谢各位,火速结贴!
一起混吧 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ihefe 的回复:]

PHP code

function getNode($arr,$pt=1,$i=1){
$array = array();
foreach($arr as $val){
if($val[$i]==$pt){
$array[] =$val;
}
}
return $array;
}
print_r……
[/Quote] 可以了,你的方法很强大,谢谢了!
zhanghaoranjn 2011-02-15
  • 打赏
  • 举报
回复
刚查了一下api
你这个不能用array_merge
因为你这会出现多个键名相同
用array_merge的话后边的会覆盖前边的
ihefe 2011-02-15
  • 打赏
  • 举报
回复

function getNode($arr,$pt=1,$i=1){
$array = array();
foreach($arr as $val){
if($val[$i]==$pt){
$array[] =$val;
}
}
return $array;
}
print_r(getNode($arr));

zhanghaoranjn 2011-02-15
  • 打赏
  • 举报
回复
你说的这个数组
也可以按照我上边的方法来解决
zhanghaoranjn 2011-02-15
  • 打赏
  • 举报
回复

/*如果你说的是这个意思的话,那就是这样了*/
$arr=array(
array(1=> 1,2=>'0',3=>'php新闻'),
array(1=> 3,2=>'1',3=>'asp新闻'),
array(1=> 2,2=>'2',3=>'java新闻'),
array(1=> 5,2=>'0',3=>'linux新闻')
);
function getNode($pt=0){
global $arr;
$array = array();
foreach($arr as $vo){

if($vo[2]==$pt){
$array = array_merge($array,$vo);
}
}
return $array;

}
print_r(getNode());
一起混吧 2011-02-15
  • 打赏
  • 举报
回复
  我的数组打印出来是这样的:
Array
(
[0] => Array
(
[0] => 1
[1] => 0
[2] => 新闻相册
[3] => news
[4] => 新闻图片
[5] => 一些新闻图片
[6] => 1
[7] => xw
[8] => 23
[9] => 1
[10] => 25
[11] => 2011-01-13
[12] => ss
[13] => 0000-00-00
[14] =>
)

[1] => Array
(
[0] => 2
[1] => 0
[2] => 娱乐相册
[3] => aa
[4] => 娱乐图片
[5] => 一些娱乐图片
[6] => 1
[7] => yl
[8] => 22
[9] => 1
[10] => 11
[11] => 2011-01-18
[12] => aa
[13] => 0000-00-00
[14] =>
)

[2] => Array
(
[0] => 9
[1] => 2
[2] => 体育相册
[3] =>
[4] => sport
[5] => sport photo
[6] => 1
[7] => sport
[8] => 0
[9] => 2
[10] => 0
[11] => 2011-02-10
[12] => ss
[13] => 0000-00-00
[14] =>
)

[3] => Array
(
[0] => 10
[1] => 1
[2] => linux相册
[3] => DD
[4] => DD
[5] => DD
[6] => 1
[7] => DD
[8] => 0
[9] => 0
[10] => 0
[11] => 2011-02-09
[12] => DD
[13] => 0000-00-00
[14] =>
)

)



请求各位前辈解答!谢谢!





  • 打赏
  • 举报
回复

function getNode($pt=0) {
global $arr;
$array = array();
foreach($arr as $vo){
if($vo["P_ID"]==$pt){
$array = array_merge($array,$arr[$pt]);
}
}
return $array;
}
ihefe 2011-02-15
  • 打赏
  • 举报
回复
数组的键是数字 贴出数组结构


一起混吧 2011-02-15
  • 打赏
  • 举报
回复
谢谢各位,我的数组键名是数字,$arr[$i]["1"]==$pt 这样访问怎么就打印不出任何效果呢?难道一定要是关联数组吗?继续请教各位前辈!
skyaspnet 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 jordan102 的回复:]
PHP code

$arr=array( array('id'=>1,'P_ID'=>'0','name'=>'php新闻'), array('id'=>3,'P_ID'=>'1','name'=>'asp新闻'), array('id'=>2,'P_ID'=>'2','name'=>'java新闻'),array('id'=>5,'P_ID'=>'0','name'=>'linux新闻')……
[/Quote]

注意=是赋值,两个==才是判断是否相等,修改为:


function getNode($pt=0) {
for ($i = 0; $i < count($arr); $i++) {
if($arr[$i]["P_ID"]=$pt){
$row[]==$arr[$i];

}
}
return $row;
}

print_r(getNode());


  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zjerryj 的回复:]

你的代码有两处问题:
1、if($arr[$i]["P_ID"]=$pt){应更改为if($arr[$i]["P_ID"]==$pt){
2、$arr在函数作用域中不可见,因此要global $arr,即:
PHP code
function getNode($pt = 0) {
global $arr;
for ($i = 0; $i < count($arr); $i……
[/Quote]

现在明白楼主的意思了。

function getNode($pt = 0) {
global $arr;
$row = array();
for ($i = 0; $i < count($arr); $i++) {
if ($arr[$i]["P_ID"] == $pt) {
$row[] = $arr[$i];
}
}
return $row;
}

print_r(getNode());

张吉Jerry 2011-02-14
  • 打赏
  • 举报
回复
你的代码有两处问题:
1、if($arr[$i]["P_ID"]=$pt){应更改为if($arr[$i]["P_ID"]==$pt){
2、$arr在函数作用域中不可见,因此要global $arr,即:
function getNode($pt = 0) {
global $arr;
for ($i = 0; $i < count($arr); $i++) {
if ($arr[$i]["P_ID"] == $pt) {
$row[] = $arr[$i];
}
}
return $row;
}

print_r(getNode());
  • 打赏
  • 举报
回复
[Quote=引用楼主 jordan102 的回复:]
比如我传入P_ID=0,则取出arr[0]和arr[3]组成一个新的数组
[/Quote]

?????
  • 打赏
  • 举报
回复
你的那个函数getNode()里面的$row是哪里来的???


<?php

$arr=array(
array('id'=> 1,'P_ID'=>'0','name'=>'php新闻'),
array('id'=> 3,'P_ID'=>'1','name'=>'asp新闻'),
array('id'=> 2,'P_ID'=>'2','name'=>'java新闻'),
array('id'=> 5,'P_ID'=>'0','name'=>'linux新闻')
);

/*
现求一个函数,能根据传入的P_ID值分别取出元素来放到一个新的数组当中去,
比如我传入P_ID=0,则取出arr[0]和arr[3]组成一个新的数组,各位前辈有什么好办法?谢谢了!
还有为什么我下面这个函数不行啊。哪里错了!请求高手解答!
*/

function getNode($pt=0) {
global $arr;
$array = array();
$length = count($arr);
if ($pt < $length) {
$array = $arr[$pt];
$pt += 3;
if($pt < $length) $array = array_merge($array,$arr[$pt]);
}
return $array;
}


print_r(getNode());
/*

Array
(
[id] => 5
[P_ID] => 0
[name] => linux新闻
)

*/

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧