Php 比较字符串和数组值
例如,我们有绳子Php 比较字符串和数组值,php,arrays,string,Php,Arrays,String,例如,我们有绳子 $somestring = '11;11;11;12;13'; 和数组 $somearray = array( 11 => array( prop => array(0=>11), uid => 1, ), 21 => array( prop => array(0=>12), uid => 2, ), 32 => array( prop => arr
$somestring = '11;11;11;12;13';
和数组
$somearray = array(
11 => array(
prop => array(0=>11),
uid => 1,
),
21 => array(
prop => array(0=>12),
uid => 2,
),
32 => array(
prop => array(0=>11),
uid => 1,
),
34 => array(
prop => array(0=>11),
uid => 2,
),
35 => array(
prop => array(0=>13),
uid => 1,
),
36 => array(
prop => array(0=>13),
uid => 3,
),
37 => array(
prop => array(0=>12),
uid => 1,
),
38 => array(
prop => array(0=>12),
uid => 3,
),
39 => array(
prop => array(0=>12),
uid => 1,
),
);
在[prop]的值等于$somestring中的相同值的情况下,如何从$somearray[uid]中获取并通过如下填充行输出它:
row1:11(uid:1);11(uid:1);11(uid:2);12(uid:2);13(uid:1)
row2:11(uid:);11(uid:);11(uid:);12(uid:1);13(uid:3)
row3:11(uid:);11(uid:);11(uid:);12(uid:3);13(uid:)
row4:11(uid:);11(uid:);11(uid:);12(uid:1);13(uid:)
我在这里找到了一个相对的解决方案,但它不处理重复的值
只需复制它并执行
<?php
$str_array=explode(';',$somestring);
$final=array();
foreach($str_array as $key => $value1)
{
foreach($somearray as $value2)
{
if($value2['prop'][0]==$value1)
{
$final[$key][]='row'.$key.':'.$value1.'(uid:'.$value2['prop'][0].')'; // something like this
}
}
}
//print_r($final);
foreach($final as $keyy => $farr)
{
$myarr[$keyy]=implode(';',$farr);
}
//print_r($myarr);
echo implode('<br/>',$myarr);
<?php
error_reporting(0);
$somestring = '11;11;11;12;13';
$somearray = array(
11 => array(
prop => array(0=>11),
uid => 1,
),
21 => array(
prop => array(0=>12),
uid => 2,
),
32 => array(
prop => array(0=>11),
uid => 1,
),
34 => array(
prop => array(0=>11),
uid => 2,
),
35 => array(
prop => array(0=>13),
uid => 1,
),
36 => array(
prop => array(0=>13),
uid => 3,
),
37 => array(
prop => array(0=>12),
uid => 1,
),
38 => array(
prop => array(0=>12),
uid => 3,
),
39 => array(
prop => array(0=>12),
uid => 1,
),
);
$sme_array = explode(";",$somestring);
$somestrarray = array_unique($sme_array);
$res = array();
foreach($somearray as $key=>$val){
foreach($somestrarray as $value){
if($val['prop'][0] == $value){
$res[$value][] = $val['uid'];
}
}
}
$cnt_values = array_count_values($somestrarray);
$num_loop = 1;
foreach($cnt_values as $key=>$val){
$num_loop = (count($res[$key])/$val) > $num_loop?(count($res[$key])/$val):$num_loop;
}
for($i=0; $i<$num_loop; $i++){
echo "row".($i+1).":";
foreach($sme_array as $vals){
if(array_key_exists($vals,$res)){
echo $vals."(uid:".$res[$vals][0].");";
array_shift($res[$vals]);
}
}
echo "<br>";
}
?>
真的,你应该自己试试。如果你已经有了,我需要指引。我应该首先使用explode从字符串数组中生成,还是不是NESSERY?行1:11(uid:1);11(uid:1);11(uid:2);12(uid:2);这里的11,12,13是什么?这些键是来自$somearray吗?11,12,13只是来自$somestring,它们不是键。@drupal2000请检查链接并告诉我您需要的任何更改()Thx,Harmeet,但这不是所需的输出。第一行应该来自示例行1:11(uid:1);11(uid:1);11(uid:2);12(uid:2);13(uid:1),第二排第2:11行(uid:);11(uid:);11(uid:);12(uid:1);13(uid:3)等等。@drupal2000确定检查这个。请让我知道这里的最终数组是否正确?在代码的第一行中,类似于第0:11行(uid:11);行0:11(uid:11);行0:11(uid:11)这是不正确的。第一行应该是第1:11行(uid:1);11(uid:1);11(uid:2);12(uid:2);13(uid:1)每行应为'11;11;11;12;13'具有按顺序对应的uid值。